网站搜索

TypeScript 在新闭包中使用时忽略可能未分配的变量


在“严格”TypeScript模式下,这是一个错误:

let a: number

a.toString() // error TS2454: Variable 'a' is used before being assigned.

显然,因为 a 没有被赋值。

但是,如果 a 在一个新的闭包*中使用,TypeScript 不会报错:

let a: number

process.on('SIGTERM', () => {
  a.toString() // no error
})

TypeScript 不应该说类似“我们还不知道它已经被初始化”这样的话吗,因此如果用户知道它已经被初始化,就需要 a!.toString()?

我知道我可以将 a 输入为 number | undefined,但似乎基于我完全没有给 a 赋值而声明它,这是隐式的。

*像自调用函数这样的确定性同步运行的闭包,会正确报错