为什么没有TypeScript类型检查算术运算?

时间:2016-07-18 11:52:22

标签: typescript

为什么TypeScript不会在下面抛出类型不匹配?

undefined * 1 === NaN

为它实现类型检查将是微不足道的:

(n : number, m : number) => number

是否也可以为+运算符实现一个?

2 个答案:

答案 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"
您可以在代码中检查运行时的那些内容,但编译器无法静态地计算它。