为什么打字稿不满意与未定义比较?

时间:2019-06-11 23:12:22

标签: typescript

let myVar: number | undefined;

if (100 > myVar) doSomething();

打字稿告诉我“ myVar”可能未定义。怎么了我知道是的,我是这样明确输入的,但似乎不希望我将它放在比较中?如果变量未定义,我知道比较的结果,实际上我取决于该行为,Typescript想要我做什么?

2 个答案:

答案 0 :(得分:2)

您已经为下一个编辑此代码的人设置了一个陷阱,他们可能会认为这样做

if (myVar >= 100) {
  // Handle the other case
} else {
  doSomething();
}

是重构代码的有效方法。

如果您想假装if (100 > myVar!)从来都不是myVar,则可以写undefined,尽管这可能传达了更加危险的意图。

if (100 > (myVar || 0))是一种更清晰的方式,可以传达undefined0在这种特殊情况下得到相同的待遇。

答案 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();