【実務・中級編】 Discriminated UnionsによるPropsの型安全な分岐 – React実践ガイド

やあ。今日も元気にコード書いてるかい?

「ボタンコンポーネント作ったんだけど、なんだかPropsがカオスになってきた……」
「`href`が渡されたら``タグになって、渡されなかったら`
);
};

この実装の何がスゴいのか?

1. `intent` プロパティによる完全な排他制御
開発者はコンポーネントを使う際、最初に `intent=”button”` なのか `intent=”link”` なのかを強制的に選ばされる。これにより、「ボタンなのにhrefがある」という矛盾が物理的に不可能になる。
2. `never` 型の暴力的なまでの優しさ
`ButtonAsButtonProps` の中で `href?: never;` と定義している。これは、「このプロパティには何も値を入れさせない(undefinedすら許さない)」という強烈な意思表示だ。もし利用側が `intent=”button”` なのに `href` を渡そうとすると、TypeScriptは親切に「おい、そのプロパティは存在しねぇよ」と赤く波線を出して教えてくれる。
3. 内部実装での型安全な分岐
Reactコンポーネントの実装側でも、`if (rest.intent === ‘link’)` と書くだけで、TypeScriptのコントロールフロー分析が働き、安全に `` タグ用のPropsと`

コメント

タイトルとURLをコピーしました