Utility Type とは?
TypeScript provides several utility types to facilitate common type transformations. These utilities are available globally.
型変換を容易にするための型です。
本稿では上記のページに記載されている Utility Type をすべて記載するわけではありませんのでご了承ください。
オブジェクトのプロパティに関する Utility Type
すべてのプロパティを任意のプロパティにした型を生成する
type Foo = {
hoge: string;
fuga: number;
};
type PartialFoo = Partial<Foo>;
// {
// hoge?: string | undefined;
// fuga?: number | undefined;
// }
すべてのプロパティを必須のプロパティにした型を生成する
type Foo = {
hoge?: string;
fuga?: number;
};
type RequiredFoo = Required<Foo>;
// {
// hoge: string;
// fuga: number;
// }
すべてのプロパティを読み取り専用にした型を生成する
type Foo = {
hoge: string;
fuga: number;
};
type ReadonlyFoo = Readonly<Foo>;
// {
// readonly hoge: string;
// readonly fuga: number;
// }
必要なプロパティのみを抜き出した型を生成する
type Foo = {
hoge: string;
fuga: number;
piyo: boolean;
};
type PickFoo = Pick<Foo, "hoge">;
// {
// hoge: string;
// }
type MultiPickFoo = Pick<Foo, "hoge" | "fuga">;
// {
// hoge: string;
// fuga: number;
// }
不要なプロパティを取り除いた型を生成する
type Foo = {
hoge: string;
fuga: number;
piyo: boolean;
};
type OmitFoo = Omit<Foo, "hoge">;
// {
// fuga: number;
// piyo: boolean;
// }
type MultiOmitFoo = Omit<Foo, "hoge" | "fuga">;
// {
// piyo: boolean;
// }
type AllOmitFoo = Omit<Foo, "hoge" | "fuga" | "piyo">;
// {}
// この状態だと上書き可能なため注意
ユニオン型に関する Utilty Type
必要な要素のみを抜き出した方を生成する
type Foo = "hoge" | "fuga" | "piyo";
type ExtractFoo = Extract<Foo, "hoge">;
// "hoge"
type MultiExtractFoo = Extract<Foo, "hoge" | "fuga">;
// "hoge" | "fuga"
不要な要素を取り除いた型を生成する
→ Exclude<Type, ExcludedUnion>
type Foo = "hoge" | "fuga" | "piyo";
type ExcludeFoo = Exclude<Foo, "hoge">;
// "fuga" | "piyo"
type MultiExcludeFoo = Exclude<Foo, "hoge" | "fuga">;
// "piyo"
null と undefined を取り除いた型を生成する
type Foo = "hoge" | "fuga" | "piyo" | null | undefined;
type NonNullableFoo = NonNullable<Foo>;
// "hoge" | "fuga" | "piyo"
引数に関する Utilty Type
引数の型をタプル型で取得する
function foo(hoge: string, fuga: number): void {}
type ParametersFoo = Parameters<typeof foo>;
// [hoge: string, fuga: number]
const parameters: ParametersFoo = ["str", 1];
foo(...parameters);
コンストラクタの引数の型をタプル型で取得する
class Foo {
public constructor(hoge: string, fuga: number) {}
}
type ConstructorParametersFoo = ConstructorParameters<typeof Foo>;
// [hoge: string, fuga: number]
戻り値に関する Utility Type
戻り値の型を取得する
function foo(): string {
return ``;
}
type ReturnTypeFoo = ReturnType<typeof foo>;
// string
辞書型に関する Utility Type
type Union = "hoge" | "fuga" | "piyo";
type Foo = Record<string, number>;
// {
// [x: string]: number;
// }
type Bar = Record<number, Union>;
// {
// [x: number]: Union;
// }
type Baz = Record<Union, boolean>;
// {
// hoge: boolean;
// fuga: boolean;
// piyo: boolean;
// }