【发布时间】:2017-12-07 14:46:13
【问题描述】:
我有一个联合返回类型的(比较)函数。它可以返回-1、1 或0。但是,我需要一个特殊情况(“结果”),用于当至少一个被比较的项目没有定义时。编译器允许我添加 null 作为潜在的返回值,但不能添加 NaN(在某些情况下这会有意义,例如比较数字或日期)。
这样编译
function myFunc(item1: MyType, item2: MyType): -1 | 0 | 1 | null {
...
}
但是对于这个,编译器说“找不到名称 NaN”:
function myFunc(item1: MyType, item2: MyType): -1 | 0 | 1 | NaN {
...
}
为什么不允许NaN?有没有办法使用NaN?
【问题讨论】:
-
NaN 不是 int 它是浮点数,这可能是 TS 不喜欢它的原因。
-
@mfeine 是肯定的,但是这个
function bla(): 1 | "3" | null { ... }也可以编译。 -
JavaScript 在 int 和 float 之间没有区别。两者都是同一类型
Number。我认为 NaN 也是Number。 -
我敢打赌 1 | "3" | null 被推断为任何类型。文字类型是一种 TS 特性,它们可能有自己的规则 :-)
-
是的,我的意思是文字类型“不需要”是同一类型。