我尝试编译:
const value = "20"
const x : string | never = "10" === value ? throw Error("bad things") : "hello"
...并在
throw
上收到错误消息- expression expected
.我可以使用就地调用的内联方法解决这个问题,但这看起来不太好。 ( (() => {throw Error("bad things"})()
)为什么不能放入三元运算符的分支?或者是否有另一种有效的语法,也许是我缺少的编译选项?
在变通方法(
(() => throw Error("bad things")()
)中,如果函数体中没有大括号,抛出似乎也不起作用。
最佳答案
这是该语言的语法怪癖。
声明throw ex
可以看作是类型为 never
的表达式, 因为 never
是不返回的函数类型,这正是您 throw
时发生的情况。 .在许多语言中都有 bottom type (什么是 never
的技术术语——它不仅仅是一个“奇怪的关键字”)。
声明throw ex
例如,不同于语句 for (let x of ...)
因为后者不能被理解为返回任何东西,而 throw ex
可以理解为返回never
.
关于exception - typescript 2 - 在三元/条件运算符表达式中抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40573516/