https://isehara-3lv.sakura.ne.jp/blog/2023/07/02/型定義しない気持ち悪さtypescript/
の続編になりますが、recordとmapped typeというのはオブジェクトの型表現に関わるTypeScriptに固有の機能です。どちらもできることはリンク先のコードと同じですが、記述方法がよりスマートだと思います。
type WeekDay = "Mon" | "Tue" | "Wed" | "Thu" | "Fri";
type Day = WeekDay | "Sat" | "Sun";
// record type(to use above types)
let nextDay: Record<WeekDay, Day> = {
Mon: "Tue",
Tue: "Wed",
Wed: "Thu",
Thu: "Fri",
Fri: "Sat",
};
console.log(nextDay.Wed); //Thu
// mapped type
let nextDayM: { [k in WeekDay]: Day } = {
Mon: "Tue",
Tue: "Wed",
Wed: "Thu",
Thu: "Fri",
Fri: "Sat",
};
console.log(nextDayM.Mon); //Tue
この例だとrecordもmappedもできることは変わらないのですが、mapped typeの方がルックアップ型と組み合わせて使うことでrecord typeよりもできることが広いです。
また、強力なのでTypeScriptには組み込み型でmapped typeが存在していますが、Record<keys, value>などは代表的な物です。
admin