【TypeScript】コンディショナルタイプ(Conditional Types)とは何ですか?
TypeScript

【TypeScript】コンディショナルタイプ(Conditional Types)とは何ですか?

作成日:2021年08月06日
更新日:2021年08月08日

社会人の時に使用する型と、学生の時に使用する型があったとします。

ts
interface Profile {
name: string;
age: number;
}
interface Worker extends Profile {
job: string;
}
interface Student extends Profile {
school: string;
}

この型を社会人の時と学生の時で使い分ける時、どうすればいいのでしょうか。

このような時に使用するのが、コンディショナルタイプ(Conditional Types)です。

書き方は、以下のように三項演算子で書きます。

ts
type Resume<T> = T extends { job: string } ? T : Student;

TWorker の時は、jobがあるのでWorkerになり、TStudentの時は、jobがないのでStudentになります。

TWorkerにしてみます。

ts
const profile: Resume<Worker> = {
name: "田中",
age: 23,
job: "営業",
};

確認してみると、

image2

エラーが発生しておりません。

では、T を Student にしてみます。

ts
const profile: Resume<Student> = {
name: "田中",
age: 23,
job: "営業",
};

確認してみると、

image3

エラーとなり、『型 '{ name: string; age: number; job: string; }'\ を型 '\Student'\ に割り当てることはできません。オブジェクト リテラルは既知のプロパティのみ指定できます。'job' は型 'Student' に存在しません。』と指摘されました。

© 2024あずきぱんウェブスタジオ