Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 打字稿-否“;变量在赋值之前使用";函数内部_Typescript_Variables_Initialization_Undefined_Let - Fatal编程技术网

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