异步方法的返回类型

问题描述 投票:0回答:2

令人惊讶的是,Typescript 可以使用

ReturnType<>
给出函数或类方法的返回类型,如下所示:

class Foo{
    bar(){ return {one:1, two:2};}
}

type  typeBar = ReturnType<Foo['bar']>;

但是,如果方法是异步的,是否可以获得已解决的 Promise 的类型?

class Foo{
    async asyncBar() { return new Promise((resolve) => resolve({ one: 1, two: 2 }));}
}
type  typeBar = ReturnType<Foo['asyncBar']>; // the type here is Promise

那么从

{one:number, two:number}
得到
Foo['asyncBar']
的运算符是什么?

typescript asynchronous return-type
2个回答
7
投票

您可以定义一个类似的类型

type Unpack<T> = T extends Promise<infer U> ? U : T;

然后使用

class Foo {
    async asyncBar() { return new Promise<{one:1, two:2}>((resolve) => resolve({ one: 1, two: 2 }));}
}

type Unpack<T> = T extends Promise<infer U> ? U : T;
type typeBar = Unpack<ReturnType<Foo["asyncBar"]>>;

0
投票

“你需要至少 15 个声望才能投票”...来吧,溢出者 --- 如果你立即操**我的 d***,我会亲自给你 15 个声望

© www.soinside.com 2019 - 2024. All rights reserved.