为什么Typescript在函数中允许空/未定义

为什么Typescript在函数中允许空/未定义,typescript,Typescript,为什么Typescript允许在那里传递null/未定义的 // "strictNullChecks": false function someFun(param: (foo: any) => any) {} someFun(null); // no error - incorrect someFun(undefined); // no error - incorrect 引述 在严格的空检查模式下,空值和未定义值不在每种类型的域中,只能分配给它们自己和任何(一个例外是未定义值也可以分配

为什么Typescript允许在那里传递
null
/
未定义的

// "strictNullChecks": false
function someFun(param: (foo: any) => any) {}
someFun(null); // no error - incorrect
someFun(undefined); // no error - incorrect
引述

在严格的空检查模式下,空值和未定义值不在每种类型的域中,只能分配给它们自己和任何(一个例外是未定义值也可以分配给void)

..T和T |未定义在常规类型检查模式中被视为同义词(因为未定义被视为任何T的子类型)

引述

在严格的空检查模式下,空值和未定义值不在每种类型的域中,只能分配给它们自己和任何(一个例外是未定义值也可以分配给void)

..T和T |未定义在常规类型检查模式中被视为同义词(因为未定义被视为任何T的子类型)


它允许这样做是因为,正如您所知,您禁用了
--stricnullchecks
。您是否在问“为什么禁用
--strictNullChecks
会禁用严格的空检查”?答案如下。或者您在问“为什么默认情况下禁用了
--strictNullChecks
”?这可能就是答案:它将破坏在这些
--strict
选项存在之前使用TypeScript的现有现实世界代码。它允许这样做,因为您知道,您禁用了
--strictNullChecks
。您是否在问“为什么禁用
--strictNullChecks
会禁用严格的空检查”?答案如下。或者您在问“为什么默认情况下禁用了
--strictNullChecks
”?这可能是答案:它将打破在这些
——严格的
选项存在之前使用TypeScript的现有现实世界代码。