【发布时间】:2020-08-20 00:36:32
【问题描述】:
我有一个函数 foobar(x:string) 如果 x 是空字符串,它将不会返回。否则,它返回另一个字符串。
所以我不能声明它返回“never”,如果我声明它返回“string”,TS没有意识到后面的代码可能无法到达
(是的,这是一个可怕的设计。不,我不能改变它)
有时,我需要在另一个函数中将它与一个空 x 一起使用,该函数在其他分支中返回一个值。所以像
function f(n:number)
{
if (n==0) {
foobar("")
}
else
{
return n - 1
}
}
TS 抱怨是因为并非所有路径都返回一个值。所以我想告诉编译器 foobar 不会返回(或者,等效地,它之后的代码是不可访问的)。编造一些东西,比如:
function f(n:number)
{
if (n==0) {
foobar("")
/** @notreachable */
}
else
{
return n - 1
}
}
我可以这样做吗?我还可以做些什么?我可以返回某种类型的东西 never,也许,但我如何获得一个从不返回的“值”?
【问题讨论】:
-
我不明白一个函数如何永远无法返回。我的意思是,它可以返回 void 或一个永不重复但同步功能的承诺?
-
ChristophLütjen 有 2 种同步函数不返回的情况:异常或无限循环。
-
并非一切都是 node.js :) 这是 Rhino。 Foobar 暂停执行(this的实现确实涉及异常),并通过调用另一个函数重新启动它
标签: typescript compiler-warnings unreachable-code