javascript 在函数中使用未定义的全局变量时无TypeScript错误

gcuhipw9  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(139)

我刚接触 typescript 。我以为它应该能捕捉到这样的东西,但也许我对它的理解还不够好。当我尝试做这样的事情时,问题出现了:

interface A {
  prop: string
}

let a: A

function f() {
  console.log(a.prop) // Runtime error
}

f()

毫无疑问,a可能在函数中未定义,或者a应该立即定义,因为否则它是未定义的,不适合A类型,或者至少它应该像A | undefined那样类型化。
当你输入let a: A | undefined时,你会立即在函数中得到一个错误,a可能是未定义的,这是我所期望看到的,如果let a: A实际上也允许它是未定义的。
我错过了什么吗?在tsconfig中有我应该打开的设置吗?我已经在使用strict了。

64jmpszr

64jmpszr1#

let a: A;是一个声明,告诉TypeScript“* 我稍后初始化它,在我使用它之前,它总是A *"。如果你试图在没有先给它赋值A的情况下使用它,TypeScript实际上会抱怨--但是这种控制流分析没有扩展到函数调用,在那里它变成了一个非常困难的问题。

相关问题