typescript - 异步方法的返回类型

标签 typescript asynchronous return-type

令人惊奇的是,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']

最佳答案

你可以定义一个类型

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"]>>;

关于typescript - 异步方法的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54110490/

相关文章:

javascript - 如何在 Cordova 插件中包含 npm 依赖项

c# - 如何从模拟对象返回 IQueryable<TEntity> 对象?

python - 分布式 TensorFlow [异步,图间复制] : which are the exactly interaction between workers and servers regarding Variables update

java - 在单词争夺游戏的 final方法中从字符串生成器获取返回类型时遇到问题

java - 方法可以返回抽象类类型吗?

javascript - 无类型函数调用可能不接受类型参数 - Angular 5 http 调用

javascript - RegExp匹配url中的查询参数

javascript - 在 md-select 中使用 md-virtual-repeat 不起作用?

javascript - 控制台中存在完整数组,但 array.length = 0

return-type - 如何使用返回类型从 TypeScript 方法中的 Observable 返回