exception - typescript 2 - 在三元/条件运算符表达式中抛出

标签 exception typescript conditional-operator

我尝试编译:

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/

相关文章:

java - 为什么在作为 JAR 执行时会出现 NoSuchMethodException?

Python多非托管资源和异常安全

javascript - 在 TypeScript 中使用 JavaScript 类

reactjs - react-redux 类型文件中的 TypeScript 错误

javascript - 是否有一种模式的名称,在该模式中,当新操作开始时,先前的异步操作会自动取消?

java - 三元从句中连续两个问号是什么意思?

scala - 在 Scala 构造函数中捕获异常

Java main方法的异常规范

Java条件运算符? : result type

python - 如何在列表理解中使用条件表达式(带有 if 和 else 的表达式)?