Typescript 打字稿-否“;变量在赋值之前使用";函数内部
我想了解以下类型脚本行为: 下面的代码Typescript 打字稿-否“;变量在赋值之前使用";函数内部,typescript,variables,initialization,undefined,let,Typescript,Variables,Initialization,Undefined,Let,我想了解以下类型脚本行为: 下面的代码 let a: number if (a === undefined) { console.log("how?") } let a: number const f = (): void => { if (a === undefined) { console.log("how?") } } f() 抛出错误:“在赋值之前使用了变量“a” 但是下面的代码 let a: number if (a === undef
let a: number
if (a === undefined) {
console.log("how?")
}
let a: number
const f = (): void => {
if (a === undefined) {
console.log("how?")
}
}
f()
抛出错误:“在赋值之前使用了变量“a”
但是下面的代码
let a: number
if (a === undefined) {
console.log("how?")
}
let a: number
const f = (): void => {
if (a === undefined) {
console.log("how?")
}
}
f()
工作正常,并记录“如何?”
为什么呢?还有,如果它的类型是number
,为什么a===undefined
呢?在Typescript GitHub项目中有一个关于这一点的说明。这是typescript技术设计的一个局限
Ryan Cavanaugh写的是
因为我们没有内联函数的流控制效果
对于第二个问题:在TS中,未初始化的变量总是未定义的,不管其类型如何。例如,这与C不同,C中类型为
bool
的变量总是true或false,并初始化为false。在TS中,这个变量也可以是未定义的,如果我记得清楚的话,也可以是null。所以有时候写作是好的
if( testVariable === false)
而不是简单地
if( !testVariable )
为了处理错误,在赋值之前使用变量“a”。我认为一个简单的解决方案是将变量声明为
编号
或未定义
,而不仅仅是编号
设a:number |未定义
另一种模式只是使用值初始化变量:
设a:number=0
几年前,我在C#中经常使用这种模式,但我个人并不喜欢JavaScript中的这种模式,我更喜欢在变量赋值的条件是有条件的情况下不设置变量。谢谢。您说过“在TS中,该变量也可以是未定义的,如果我记得很清楚的话,也可以是null。”,但当我这样做时,让a:number=undefined我得到:类型“undefined”不能分配给类型“number”。
。为什么呢?可能(我不确定)只有在你用一个值初始化它之前它才能被定义。之后,只能为其指定有效的类型化值。要分配undefined,您必须将变量定义为number | undefined