Lou*_*uis 7 typescript typescript2.0
我有这个代码:
function A(): never {
throw new Error("fail");
}
function B(): never {
A();
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
index.ts(5,36): error TS2534: A function returning 'never' cannot have a reachable end point.
Run Code Online (Sandbox Code Playgroud)
为什么我收到此错误?显然,A永远不会返回,因此B没有可达到的终点.
这是编译器的限制.Ryan Cavanaugh 在这里解释道:
这里的限制与编译器的设计方式有关 - 控制流分析在类型检查之前发生,但是我们需要类型信息(以及标识符解析)来确定
fail()调用指向函数是: never
fail()在此引用的上下文中的调用与A()此处提出的问题基本相同.我在上面的引文中推断,到控制流分析完成时,A()还不知道返回的事实,所以假设return undefined;结尾处的隐含B将被执行,因此B将返回undefined而不是完全回归 修复程序是在发布评论的问题报告中提到的,只需return在调用永不返回的函数之前添加一个:
function B(): never {
return A();
}
Run Code Online (Sandbox Code Playgroud)