【发布时间】:2018-10-15 01:36:00
【问题描述】:
我有一些基本上看起来像这样的 Typescript 代码
if( ... )
result = $(document.createElement("div")) ;
} else if( ... ) {
result = $(document.createElement("div")) ;
} else {
assert.unreachable( "Unknown label in buildHTML.") ;
}
result.attr( "data-childNumber", childNumber.toString() ) ;
assert.unreachable的返回类型是never。
最后一行显示“变量‘结果’在被赋值之前被使用。”有一个错误。
在我看来,来自assert.unreachable 的never 结果应该告诉编译器else 部分没有路径。
我知道我可以通过在else 末尾添加throw null; 来抑制错误,但这似乎不优雅。
unreachable 的定义中也出现了类似的问题。看起来像这样
export function unreachable( message? : string ) : never {
if( message===undefined ) message = "Unreachable code reached." ;
else message = "Unreachable code reached: "+message ;
raiseTheAlarm( message ) ;
}
raiseTheAlarm 的结果类型为never。在这种情况下,我收到一个错误“返回 'never' 的函数不能有可到达的端点。”
我通过在调用raiseTheAlarm 之前添加return 关键字来解决此问题。这看起来有点奇怪。 (当然,电话之后的throw null; 也可以。)
有没有更好的方法告诉编译器代码中的某个点不可达?
【问题讨论】:
-
tsc编译器版本为2.3.4
-
对
assert.unreachable的调用确实阻止了后续代码的执行,因为对assert.unreachable函数的调用永远不会返回。 -
让我了解
never类型。我完全错过了这个功能。很抱歉造成混乱。
标签: typescript