let myVar: number | undefined;
if (100 > myVar) doSomething();
打字稿告诉我“ myVar”可能未定义。怎么了我知道是的,我是这样明确输入的,但似乎不希望我将它放在比较中?如果变量未定义,我知道比较的结果,实际上我取决于该行为,Typescript想要我做什么?
答案 0 :(得分:2)
您已经为下一个编辑此代码的人设置了一个陷阱,他们可能会认为这样做
if (myVar >= 100) {
// Handle the other case
} else {
doSomething();
}
是重构代码的有效方法。
如果您想假装if (100 > myVar!)
从来都不是myVar
,则可以写undefined
,尽管这可能传达了更加危险的意图。
if (100 > (myVar || 0))
是一种更清晰的方式,可以传达undefined
和0
在这种特殊情况下得到相同的待遇。
答案 1 :(得分:1)
为什么打字稿不满意与未定义比较?
如果启用strictNullChecks
,TypeScript将加强类型安全性。 As of early 2017,这种类型安全性提高意味着如果“ <
,>
,<=
,>=
或{{1}的任何一个操作数}运算符为in
。”
打字稿要我做什么?
当类型是nullable
的并集时,TypeScript希望您在运行关系运算符之前检查number | undefined
。
undefined
如果零是有效的伪造价值,则可以使用以下形式之一:
let doSomething = () => undefined;
let myVar: number | undefined;
if (myVar && 100 > myVar) doSomething();