にthrow'ing: - expression expected
活字体2 - 私がコンパイルしようとする条件付き/三項演算子式
const value = "20"
const x : string | never = "10" === value ? throw Error("bad things") : "hello"
を...とthrow
にエラーが発生します。私はインラインメソッドを使用してこれを解決できますが、それはうまく見えません。 ((() => {throw Error("bad things"})()
)
なぜ3値演算子の枝を投げても問題ないのですか?あるいは、私が行方不明のオプションをコンパイルするための別の構文がありますか?
関数本体に中括弧を入れないでスローが機能しないように見えますが、回避策では((() => throw Error("bad things")()
)です。
丁寧に回答します。言語に 'never'を導入すると、スローする関数の戻り値の型として - スローを仮定するのは当然のことですが、' never'を返す式です。 –
私は強く反対します。 'throw'はインクリメントしない' for'のような文であり、 'while(true)'であり、これらの文の戻り値の型はサブルーチン呼び出しの文脈でのみ意味を持ちます。 'throw Error()'という文は単純に*式ではなく、*は決して 'never'ではない型を持ちます。 **そのステートメントを含むサブルーチンへの呼び出し、または決して返されない他のロジックは、式であり、タイプは「決して」ではありません。 – Alex
@JørgenTvedt式は*を*評価するものですが、ステートメントは何かを行うことになっています。私は値を持つものとして 'スロー 'を見ようとするのはあまり意味がありませんが、コード実行のパスを変更する何かをする際にははるかに意味があります。 'var x = while(true){}'や 'var x = if(x == y){...}'にあるように、 'var x = throw Error()'にも意味があります。 – Alex