Mah*_*Ali 16 javascript typescript
考虑我们有一个如下所示的函数
const upper = (str: string) : string => string.toUpperCase()
Run Code Online (Sandbox Code Playgroud)
我们可以使用以下方法获取函数的类型ReturnType
type Test = ReturnType<typeof upper>
Run Code Online (Sandbox Code Playgroud)
但现在考虑我们有一个异步函数。
const getUserData = async (uid: string): Promise<{name: string, email: string}> => {
...
};
Run Code Online (Sandbox Code Playgroud)
现在我们怎样才能得到这种类型{name: string, email: string}
for*_*d04 20
您可以AsyncReturnType
使用以下命令创建infer
:
type AsyncReturnType<T extends (...args: any) => Promise<any>> =
T extends (...args: any) => Promise<infer R> ? R : any
Run Code Online (Sandbox Code Playgroud)
测试:
const getUserData = async (uid: string): Promise<{ name: string, email: string }> => {...};
type T1 = AsyncReturnType<typeof getUserData> // { name: string; email: string; }
Run Code Online (Sandbox Code Playgroud)
Alu*_*dad 10
标记的函数的async
返回类型为Promise<T>
我们可以使用条件类型来提取 Promise 将解析的值的类型。
export type ValueType<T> =
T extends Promise<infer U>
? U
: T;
Run Code Online (Sandbox Code Playgroud)
然后我们可以将该类型与 ReturnType 组合以获得所需的结果。
const getUserData = async (uid: string): Promise<{name: string, email: string}> => {
...
};
type UserData = ValueType<ReturnType<typeof getUserData>>;
Run Code Online (Sandbox Code Playgroud)