【发布时间】:2019-06-04 05:58:27
【问题描述】:
Typescript 可以用ReturnType<> 给出函数或类方法的返回类型,如:
class Foo{
bar(){ return {one:1, two:2};}
}
type typeBar = ReturnType<Foo['bar']>;
但是,如果方法是异步的,是否可以获得已解决的承诺的类型?
class Foo{
async asyncBar() { return new Promise((resolve) => resolve({ one: 1, two: 2 }));}
}
type typeBar = ReturnType<Foo['asyncBar']>; // the type here is Promise
那么从Foo['asyncBar'] 得到{one:number, two:number} 的操作员是什么?
【问题讨论】:
-
类型不应该只是Promise吗?您的意思是获得已解决承诺的预期类型吗?编辑:我猜不是,但不是专家,我正在等待回复
-
@Osakr 是正确的,您定义
asyncBar的方式将是Promise<{}>,这是正确的,因为这是函数的返回。你期望typebar是什么?Promise<{one:number, two:number}>或者你只是想要{one:number, two:number}。我们可以得到任何一个,但您需要提供更多信息:) -
@TitianCernicova-Dragomir,是的,我想要 {one:number, two:number},已解决承诺的类型
-
你可以用
type Unpack<T> = T extends Promise<infer U> ? U : never解压一个promise类型 -
@IngoBürk 这听起来像是对我的回答(或接近一个),为什么要把它放在应该的地方:)
标签: typescript asynchronous return-type