Skip to content

TypeScript ユーティリティ型 解説

TypeScript の組み込みユーティリティ型と、それに付随するキーワードを、用途ごとにグループ化しました。オブジェクトの形状変更、ユニオンの絞り込み、関数の記述、文字列リテラルの変換、値からの型の取得。各行には型と、実際に書くことになるエイリアスを示します。

ユーティリティ型は型のためのジェネリック関数です。1 つか 2 つの型を受け取って新しい型を返すため、すべての形状を手で書く必要はありません。真価を発揮するのは派生型です。正しい情報の源が別の型や値であり、自分の型にそれを自動的に追跡させたい場合です。経験則は「重複ではなく派生」。源を変更すれば、派生型も追従します。

リファレンステーブル · 22 項目
22 of 22 rows
オブジェクトの形状
すべてのプロパティが省略可能になった T。type Update = Partial<User>
すべてのプロパティが必須になった T。type Strict = Required<Opts>
すべてのプロパティが readonly になった T。type Frozen = Readonly<User>
K のキーだけを残した T。type Preview = Pick<User, "id" | "name">
K のキーを取り除いた T。type SafeUser = Omit<User, "password">
キーが K、値が V であるオブジェクト。type Scores = Record<string, number>
ユニオンの絞り込み
X に代入可能なメンバーを取り除いたユニオン U。type NoNull = Exclude<T, null>
U のうち X に代入可能なメンバー。type OnlyStr = Extract<T, string>
null と undefined を取り除いた T。type Def = NonNullable<T>
関数の型
関数 F のパラメータ型のタプル。type P = Parameters<typeof fn>
関数 F が返す型。type R = ReturnType<typeof fn>
コンストラクタ F のパラメータ型のタプル。type C = ConstructorParameters<typeof Date>
コンストラクタ F が生成するインスタンスの型。type D = InstanceType<typeof Date>
Promise が再帰的に解決される型。type Data = Awaited<Promise<User>>
文字列リテラルの変換
文字列リテラル S を大文字にしたもの。type A = Uppercase<"abc"> // "ABC"
文字列リテラル S を小文字にしたもの。type B = Lowercase<"ABC"> // "abc"
先頭の文字を大文字にした S。type C = Capitalize<"abc"> // "Abc"
先頭の文字を小文字にした S。type D = Uncapitalize<"Abc"> // "aBc"
関連キーワード
オブジェクト型 T のプロパティキーのユニオン。type K = keyof User
値の型。再び書き下す必要はない。type Config = typeof defaults
conditional 型の内部で型を捕獲して再利用する。type El<T> = T extends Array<infer I> ? I : never
T が U に代入可能かどうかで X か Y を選ぶ。type IsStr<T> = T extends string ? true : false