考虑一下我们具有如下功能
const upper = (str: string) : string => string.toUpperCase()
我们可以使用ReturnType
type Test = ReturnType<typeof upper>
但是现在考虑我们有一个异步函数。
const getUserData = async (uid: string): Promise<{name: string, email: string}> => {
...
};
现在我们如何获得该类型的{name: string, email: string}
答案 0 :(得分:2)
标记为async
的函数的返回类型为Promise<T>
我们可以使用条件类型来提取承诺将解决的值的类型。
export type ValueType<T> =
T extends Promise<infer U>
? U
: T;
然后,我们可以将这种类型与ReturnType组合以获得所需的结果。
const getUserData = async (uid: string): Promise<{name: string, email: string}> => {
...
};
type UserData = ValueType<ReturnType<typeof getUserData>>;
答案 1 :(得分:1)
您可以使用infer
创建AsyncReturnType
:
type AsyncReturnType<T extends (...args: any) => Promise<any>> =
T extends (...args: any) => Promise<infer R> ? R : any
测试:
const getUserData = async (uid: string): Promise<{ name: string, email: string }> => {...};
type T1 = AsyncReturnType<typeof getUserData> // { name: string; email: string; }