ReactのPropsでユニオン型やリテラル型を使う方法を完全ガイド!初心者でもわかる型安全なProps管理
先生と生徒の会話形式で理解しよう
生徒
「ReactでPropsに渡す型にユニオン型やリテラル型を使えるんですか?」
先生
「はい、TypeScriptを使えばユニオン型やリテラル型をPropsに指定できます。これで間違った値が渡されないようにできますよ。」
生徒
「ユニオン型とかリテラル型って何ですか?」
先生
「ユニオン型は『いくつかの型のうちどれか』を表す型、リテラル型は『特定の値だけ許す』型です。例を見ていきましょう!」
1. ユニオン型とは?
ユニオン型とは「いくつかの型をまとめたもの」で、どれか一つを選べるという意味です。例えばstring | numberなら文字列か数値のどちらかを受け入れることができます。
ReactのPropsで使うと「このプロパティは文字列か数値のどちらか」というルールを作ることができます。
type BoxProps = {
size: "small" | "medium" | "large";
};
function Box({ size }: BoxProps) {
return <div>{size}サイズのボックスです</div>;
}
function App() {
return (
<div>
<Box size="small" />
<Box size="large" />
</div>
);
}
(画面に「smallサイズのボックスです」と「largeサイズのボックスです」が表示されます)
2. リテラル型とは?
リテラル型は「決められた値しか許さない型」です。例えば「red」「blue」「green」のどれかしか渡せないようにできます。
もし間違って「yellow」と書いた場合、TypeScriptがエラーを出して教えてくれます。
type ButtonProps = {
color: "red" | "blue" | "green";
};
function ColorButton({ color }: ButtonProps) {
return <button>{color}ボタン</button>;
}
function App() {
return (
<div>
<ColorButton color="red" />
<ColorButton color="blue" />
</div>
);
}
(画面に「redボタン」と「blueボタン」が表示されます)
3. ユニオン型とリテラル型を組み合わせる
ユニオン型とリテラル型を組み合わせると、より柔軟で安全な型定義ができます。例えば「文字列またはnullを許可する」といったケースです。
type MessageProps = {
text: string | null;
};
function Message({ text }: MessageProps) {
return <div>{text ? text : "メッセージはありません"}</div>;
}
function App() {
return (
<div>
<Message text="こんにちは" />
<Message text={null} />
</div>
);
}
(画面に「こんにちは」と「メッセージはありません」が表示されます)
4. 実践的な使い方
リテラル型を使うと、Propsに「ボタンの種類」を限定できます。例えば「primary」「secondary」「danger」だけにすることができます。
type ButtonProps = {
variant: "primary" | "secondary" | "danger";
};
function StyledButton({ variant }: ButtonProps) {
return <button>{variant}スタイルのボタン</button>;
}
function App() {
return (
<div>
<StyledButton variant="primary" />
<StyledButton variant="danger" />
</div>
);
}
(画面に「primaryスタイルのボタン」と「dangerスタイルのボタン」が表示されます)
5. ユニオン型やリテラル型を使うメリット
ユニオン型やリテラル型を使うと、以下のメリットがあります。
- 入力ミスを防げる:誤った値を入れるとコンパイル時にエラーが出る。
- コードが読みやすい:「このPropsはこれだけの値を取れる」と明確になる。
- 安全性が高まる:型が制約をかけることで予期せぬエラーを減らせる。
6. 注意点
ユニオン型やリテラル型は便利ですが、種類を増やしすぎると逆に複雑になります。必要な範囲で使うことが大切です。特に「色」や「ボタンの種類」など、選択肢が限られる場面で使うと効果的です。