0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TypeScriptでasync関数の戻り値の型を取得する

Last updated at Posted at 2024-08-11

TypeScriptで開発を行う際、特にPrismaのようなライブラリを使用すると、複雑な型の関数に直面することがよくあります。この記事では、TypeScriptのユーティリティ型を活用して、非同期関数の戻り値の型を取得する方法を紹介します。

ReturnTypeで関数の戻り値の型を取得する

まず、TypeScriptのユーティリティ型ReturnTypeを使用して、関数の戻り値の型を取得する方法を見ていきます。以下のようなPrismaを使用した関数があるとします。

type FuncReturnType = ReturnType<typeof getPostsForUser>

ReturnTypeを使用することで、getPostsForUser関数の戻り値の型を取得できます。しかし、この関数が非同期関数である場合、戻り値の型はPromiseに包まれた状態になります。

AwaitedPromiseを解除する

非同期関数の戻り値の型を取得する際には、その型がPromiseに包まれているため、これを解除する必要があります。ここで、TypeScriptのAwaited型を使用します。

type FuncReturnType = ReturnType<typeof getPostsForUser>
type ResolvedFuncReturnType = Awaited<FuncReturnType>

Awaitedを使用することで、Promiseに包まれた型を解除し、関数の実際の戻り値の型を取得できます。

配列の要素の型を取得する

多くの場合、Prismaでクエリを実行すると、リスト形式のデータが返されます。この場合、配列の要素の型を取得する必要があります。TypeScriptでは、配列の型から要素の型を取得するために、インデックス型[number]を使用します。

type FuncReturnType = ReturnType<typeof getPostsForUser>
type ResolvedFuncReturnType = Awaited<FuncReturnType>
type PostType = ResolvedFuncReturnType[number]

これにより、配列の各要素の型(ここではPostType)を取得することができます。

まとめ

これらのステップをすべて一つの行にまとめると、次のようになります。

type Post = Awaited<ReturnType<typeof getPostsForUser>>[number]

この一行で、非同期関数getPostsForUserの戻り値の型から、配列の各要素の型Postを取得することができます。TypeScriptのユーティリティ型を駆使することで、複雑な型操作もシンプルに行うことができるようになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?