考虑这个 MRE:
let foo: string;
function test() {
console.log(foo.trim())
}
test()
我在 TSConfig 中使用
strictNullChecks
选项。
我预计编译器会出现错误'foo' is possibly 'undefined'
。
但我只在运行时得到一个:
TypeError:无法读取未定义的属性(读取“trim”)
为什么 TSConfig 编译器不抱怨? 为什么我不需要将 uninitialized 变量键入为
string | undefined
?
这里也没有编译错误:
module1
export let foo: string;
module2
import { foo } from 'module1';
console.log(foo.trim());
在 Typescript 存储库上有一个悬而未决的问题。
这个问题虽然很老,但最近已在设计会议中讨论过。
有一个 open PR 可以通过在使用变量但从未初始化时抛出错误来“修复”此问题。
您还可以注意到,这只是“顶级”的问题
let
变量。