为什么TypeScript不会在下面抛出类型不匹配?
undefined * 1 === NaN
为它实现类型检查将是微不足道的:
(n : number, m : number) => number
是否也可以为+
运算符实现一个?
答案 0 :(得分:1)
Typescript被定义为JavaScript的超集。限制该操作将禁止在TS中使用其他有效的JS代码。
当然,但我个人希望TypeScipt试图阻止我生产NaN
NaN
是一种特殊情况,因为虽然"不是数字"在名称中,它仍然位于Number类型的域中(主要是因为底层的IEEE-754实现)。无论哪种方式,如果您需要/想要它,您可以构建自己更严格的类型(例如包装数字)。
答案 1 :(得分:0)
您无法真正防范根据编译器获取NaN
值,这是一个示例:
function mul(x: number, y: number): number {
return x * y;
}
function getDataFromServer(): Promise<number> {
// async request which returns a number
}
getDataFromServer().then(num => mul(num, 2));
编译器无法知道服务器将返回什么
它可能是一个数字,可能是数字("2"
)的字符串表示形式,甚至可能是"internal server error"
。
您可以在代码中检查运行时的那些内容,但编译器无法静态地计算它。