将接口中的字段类型替换为promises

时间:2017-11-21 21:43:23

标签: typescript generics asynchronous interface promise

Typescript具有Partial<Object>类型,有助于使对象的所有字段都可选。

是否可以以相同的方式创建将更改Promisify<Person>类型的通用类型Person

interface Person {
  getName(): string;
  getAge(): number;
}

为:

interface PromisifyPerson {
  getName(): Promise<string>;
  getAge(): Promise<number>;
}

我有一个通过Typescript接口描述的同步API,我的目标是创建API的异步版本而不重写我拥有的所有接口。这是另一个例子:

interface ApplicationApi {
  startApp(): void;
  readFile(fileName): string; 
}

type AsyncApplicationAPI = Async<ApplicationApi>

之后我希望AsyncApplicationAPI应该是这样的:

interface AsyncApplicationApi {
  startApp(): Promise<void>;
  readFile(fileName): Promise<string>; 
}

2 个答案:

答案 0 :(得分:0)

我相信你可以创造它,虽然它可能需要一些工作。您可以简单地创建一个迭代给定对象的每个属性的函数,并返回一个相同的对象,除了包含在Promises中的数据成员,以及包含在返回promises的新函数中的函数。当然,您需要担心细节,比如您是否希望所有对象属性的属性都包含在promises中......

编辑:我的回答是这样的,这样你就可以传递一个对象的实例并获得一个有效的实例。您可能无法在语言本身内对类型进行此类操作。

答案 1 :(得分:0)

type Promisified<T> = {
    [K in keyof T]: T[K] extends (...args: any) => infer R ? 
        (...args: Parameters<T[K]>) => Promise<R> :
        T;
}

或参见here