我刚接触 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了。
1条答案
按热度按时间64jmpszr1#
let a: A;
是一个声明,告诉TypeScript“* 我稍后初始化它,在我使用它之前,它总是A
*"。如果你试图在没有先给它赋值A
的情况下使用它,TypeScript实际上会抱怨--但是这种控制流分析没有扩展到函数调用,在那里它变成了一个非常困难的问题。