NonNullable<T> / ReturnType<T> / Parameters<T>
| 対応: | NonNullable<T> | TypeScript 2.0(2016) |
|---|---|---|
| ReturnType<T> | TypeScript 2.8(2018) | |
| Parameters<T> | TypeScript 3.1(2018) |
関数や null に関連するユーティリティ型を紹介します。『NonNullable<T>』は null と undefined を取り除き、『ReturnType<T>』は関数の戻り値型を取得し、『Parameters<T>』は関数の引数型をタプルで取得します。『Awaited<T>』は Promise を再帰的に解決した型を返します。
構文
NonNullable<T> // T から null と undefined を除外 ReturnType<T> // 関数型 T の戻り値型 Parameters<T> // 関数型 T の引数型(タプル) Awaited<T> // Promise<T> を再帰的に解決した型
型一覧
| 型 | 概要 |
|---|---|
| NonNullable<T> | T から null と undefined を除去した型を返す。 |
| ReturnType<T> | 関数型 T の戻り値の型を取得する。 |
| Parameters<T> | 関数型 T の引数の型をタプル型として取得する。 |
| Awaited<T> | Promise を再帰的に解決して最終的な値の型を取得する(TypeScript 4.5+)。 |
サンプルコード
// NonNullable
type MaybeString = string | null | undefined;
type DefiniteString = NonNullable<MaybeString>;
// => string
// ReturnType
function greet(name: string): string {
return `Hello, ${name}`;
}
type GreetReturn = ReturnType<typeof greet>;
// => string
function fetchUser() {
return { id: 1, name: '碇シンジ' };
}
type User = ReturnType<typeof fetchUser>;
// => { id: number; name: string }
// Parameters
function add(a: number, b: number): number {
return a + b;
}
type AddParams = Parameters<typeof add>;
// => [a: number, b: number]
// Awaited
type Resolved = Awaited<Promise<string>>;
// => string
type DeepResolved = Awaited<Promise<Promise<number>>>;
// => number
概要
これらのユーティリティ型は、外部ライブラリの関数など自分で型を定義できない場合に特に役立ちます。たとえば『ReturnType<typeof someLibraryFn>』とすることで、ライブラリ関数の戻り値型を自動的に取得できます。
『Parameters<T>』はタプル型を返すため、引数の一部だけを取り出す場合は『Parameters<typeof fn>[0]』のようにインデックスアクセスと組み合わせます。
『Awaited<T>』は非同期関数の戻り値型を取得する際に便利です。『async function』の戻り値は自動的に Promise に包まれるため、『ReturnType<typeof asyncFn>』だと Promise のままになります。そこで『Awaited<ReturnType<typeof asyncFn>>』とすることで、解決後の値の型を取得できます。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。