今まであまり使って来なかったんですが、いざ使ってみるとすごく便利でした。
組み込み型関数とは?
既存の型から新しい型を生成する組み込みユーティリティです。
ジェネリクスを使って既存の型に被せることで新しい型を生成できます。
最近使ってみて特にいい感じだったもの
全ての型関数を紹介するわけではありません。悪しからず。
Omit
TypeScript3.5で追加された新しい組み込み型関数。
既存の型から特定のプロパティを除いた型を作ることが出来ます。
type Hoge = {
a:string
b:number
c:boolean
}
type Omitted = Omit<HOGE,"c">;
/**
{
a:string
b:number
}
*/
オブジェクトの生成過程の型を管理する場合などに個人的にはよく使います。
ちなみに、当然ですが以下のように除いたものを補完してやれば元の戻ります。
const hoge:HOGE = {...omitted,...{c:true}};
Partial
全てのプロパティに?を付けた型を作ります。
type Hoge = {
a:string
b:number
c:boolean
}
type PartialHoge = Partial<HOGE>;
/**
{
a?:string
b?:number
c?:boolean
}
*/
正直初めに見たときは、何に使うのか今一つピンとこなかったのですが、
外部からの入力値を受けて部分更新に使うという使い方を聞いて納得しました。
以下のようにスプレッド構文と組み合わせることでいちいち各プロパティの存在確認を行わなくても存在する値だけで上書きが出来ます。
ReduxのReducerで辺りでかなり使えそう。
//oldHogeが古いHoge型,inputPartialがPartial<HOGE>型とする
const newHoge = {...oldHoge,...inputPartial};
Exclude型
主にUnion型から特定の型を除外した型を作ります。
type Fuga = "AAA" | "BBB" | "CCC";
type FugaWithoutC = Exclude<FUGA,"CCC">;
Union型で列挙した定数のうち、一部だけ使いたい時にとても便利です。
似たような役割にExtractもありますが、ちょっとこれは使いどころが思いつきませんでした。
二つの型の共通部分のみを抜き出すものなのですが、大体のケースはそのまま宣言すれば済む気がします。
ReadOnly
全てのプロパティにReadOnlyを付けた型を作ります。
Immutableなオブジェクトを作りたい時に。