我有一些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;
也可以工作。)
有没有更好的方法来告诉编译器代码中的某个点是不可访问的?
发布于 2017-06-10 18:55:09
至少有三种选择
(a)
else {
return assert.unreachable( "Unknown label in buildHTML.") ;
}
(b) (来自@artem的答案)
else {
result = assert.unreachable( "Unknown label in buildHTML.") ;
}
(c)
else {
assert.unreachable( "Unknown label in buildHTML.") ;
throw null ;
}
我选择了(a)项。
https://stackoverflow.com/questions/44467145
复制相似问题