首页 > 解决方案 > 为什么类型检查器允许此代码?

问题描述

这样的代码可以通过类型检查吗?

function infiniteLoop(): never {
    while (true) {
    }
}
let x = infiniteLoop();

怎样才能x存在从而栖居never型?

标签: typescript

解决方案


never是一种类型。任何变量都可以有这种类型(因为任何变量都可以有任何类型)。因此,当您说时let x = infiniteLoop(),Typescript 会推断出x具有类型never。很好。

但是,这就是它有用的地方,它会阻止您x以后使用。这才是真正的语义错误。

有关更多示例,请参阅此说明。

更一般地说,您不能期望类型系统会静态处理无限循环检测。那是因为它对于类型系统来说是一个不可判定的问题

never当您明确给出类型提示时,Typescript 方法允许静态查明不需要的行为。具体来说,它会阻止您使用您明确声明为非结束的计算结果(或从您声明为非结束的计算返回)。


推荐阅读