タグ

2023年2月17日のブックマーク (1件)

  • TypeScriptのexhaustiveness checkをスマートに書く

    TypeScriptではデザインパターンとしてtagged unionによる直和がよく使われます。このときパターンマッチに相当する処理はswitchで行われますが、そこで直和に対する分岐が網羅的であることの保証を実行時と型検査時の両方で賢く行う方法がこれまでも模索されてきました。 今回、ヘルパー関数を導入せずにいくつかの問題を同時に解決する賢い方法を思い付いたので共有します。 コード これだけです。 // switch (action.type) { ... default: throw new Error(`Unknown type: ${(action as { type: "__invalid__" }).type}`); // .. } 以下、より詳しく説明します。 問題 TypeScriptではオブジェクトに type プロパティーを用意し、決まった文字列を入れることで直和を実現

    TypeScriptのexhaustiveness checkをスマートに書く
    Haaaa_N
    Haaaa_N 2023/02/17
    おおう…黒魔術だ…とは言え、自分の場合TSだけ考えれば良いから実行時は考えなくても良いのかな