TypeScript - 函数内部没有 "Variable is used before being assigned"
TypeScript - No "Variable is used before being assigned" inside a function
我想了解以下 TypeScript 行为:
以下代码
let a: number
if (a === undefined) {
console.log("how?")
}
抛出错误:"Variable 'a' is used before being assigned."。
但是下面的代码
let a: number
const f = (): void => {
if (a === undefined) {
console.log("how?")
}
}
f()
工作正常并记录 "how?"。
这是为什么?还有,如果它的类型是 number
,怎么会 a === undefined
?
Typescript GitHub 项目中有一个关于此的 open issue。这是打字稿技术设计的局限。
来自 Ryan Cavanaugh,
because we don't inline the flow-control effects of functions
对于第二个问题:在TS中,未初始化的变量总是undefined
,不管它们是什么类型。例如,这与 C# 不同,在 C# 中,类型为 bool
的变量始终为 true 或 false 并初始化为 false。在 TS 中,该变量也可以是未定义的,如果我没记错的话,也可以是 null。所以有时候写
也不错
if( testVariable === false)
而不是简单地
if( !testVariable )
要处理错误Variable 'a' is used before being assigned.
我认为简单的解决方案是将变量声明为或者 number
或 undefined
,而不仅仅是 number
.
let a: number | undefined
另一种模式只是用一个值初始化一个变量:
let a: number = 0
几年前我在 C# 中经常使用该模式,但我个人并不关心 JavaScript 中的该模式,并且更喜欢在分配变量的条件下不设置变量一个值是有条件的。
我想了解以下 TypeScript 行为:
以下代码
let a: number
if (a === undefined) {
console.log("how?")
}
抛出错误:"Variable 'a' is used before being assigned."。
但是下面的代码
let a: number
const f = (): void => {
if (a === undefined) {
console.log("how?")
}
}
f()
工作正常并记录 "how?"。
这是为什么?还有,如果它的类型是 number
,怎么会 a === undefined
?
Typescript GitHub 项目中有一个关于此的 open issue。这是打字稿技术设计的局限。
来自 Ryan Cavanaugh,
because we don't inline the flow-control effects of functions
对于第二个问题:在TS中,未初始化的变量总是undefined
,不管它们是什么类型。例如,这与 C# 不同,在 C# 中,类型为 bool
的变量始终为 true 或 false 并初始化为 false。在 TS 中,该变量也可以是未定义的,如果我没记错的话,也可以是 null。所以有时候写
if( testVariable === false)
而不是简单地
if( !testVariable )
要处理错误Variable 'a' is used before being assigned.
我认为简单的解决方案是将变量声明为或者 number
或 undefined
,而不仅仅是 number
.
let a: number | undefined
另一种模式只是用一个值初始化一个变量:
let a: number = 0
几年前我在 C# 中经常使用该模式,但我个人并不关心 JavaScript 中的该模式,并且更喜欢在分配变量的条件下不设置变量一个值是有条件的。