From 91f8453d099221413c1827e9f13f340617a7b063 Mon Sep 17 00:00:00 2001 From: jamashita Date: Fri, 4 Oct 2024 20:34:09 +0900 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20=E2=9C=8F=EF=B8=8F=20ReturnType?= =?UTF-8?q?=20=E3=81=AE=E5=9F=B7=E7=AD=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../type-reuse/utility-types/return-type.md | 46 +++++++++++++++++++ sidebars.js | 1 + 2 files changed, 47 insertions(+) create mode 100644 docs/reference/type-reuse/utility-types/return-type.md diff --git a/docs/reference/type-reuse/utility-types/return-type.md b/docs/reference/type-reuse/utility-types/return-type.md new file mode 100644 index 00000000..27568d5b --- /dev/null +++ b/docs/reference/type-reuse/utility-types/return-type.md @@ -0,0 +1,46 @@ +--- +description: 関数の戻り値の型を取得する +title: "ReturnType" +--- + +`ReturnType`は、関数型`T`の戻り値を取得するユーティリティ型です。 + +## ReturnType<T>の型引数 + +### T + +型引数`T`には、関数の型を渡します。関数でない型を渡すと`never`型になります。 + +## NonNullableの使用例 + +```ts twoslash +// @errors: 2344 +type ReturnType1 = ReturnType<() => string>; +// ^? +type ReturnType2 = ReturnType<(arg: string) => string | number>; +// ^? +type ReturnType3 = ReturnType<() => never>; +// ^? +``` + +多くは`typeof`と併用して実際の関数の戻り値を取得します。 + +```ts twoslash +const isEven = (num: number) => { + return num / 2 === 0; +}; + +type isEvenRetType = ReturnType; +// ^? +``` + +`ReturnType`は内部的には`infer`を使って実装されています。 + +```ts twoslash +// @noErrors +type ReturnType any> = T extends ( + ...args: any +) => infer R + ? R + : any; +``` diff --git a/sidebars.js b/sidebars.js index 0089859f..47dd47c7 100644 --- a/sidebars.js +++ b/sidebars.js @@ -354,6 +354,7 @@ module.exports = { "reference/type-reuse/utility-types/extract", "reference/type-reuse/utility-types/no-infer", "reference/type-reuse/utility-types/nonnullable", + "reference/type-reuse/utility-types/return-type", ], }, "reference/type-reuse/mapped-types", From 415a287f96ca3f27ead56d8557fddd5b6172b2cd Mon Sep 17 00:00:00 2001 From: jamashita Date: Fri, 4 Oct 2024 20:41:56 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20=E2=9C=8F=EF=B8=8F=20NonNullable?= =?UTF-8?q?=20=E3=81=AE=E3=83=AA=E3=83=B3=E3=82=AF=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 504441d8..13f7c8af 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1528,7 +1528,7 @@ type T3 = Extract; #### NonNullable -- `NonNullable`は、nullまたはundefinedを含む型からいずれも除外するユーティリティ型。 +- [`NonNullable`](reference/type-reuse/utility-types/nonnullable.md)は、nullまたはundefinedを含む型からいずれも除外するユーティリティ型。 ```typescript twoslash type T1 = string | null | undefined;