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>;
}
答案 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。