打字稿通用Promise返回T或无效

时间:2019-02-18 22:21:47

标签: typescript

打字稿中是否可以将Promise定义为通用还是无效?

new Promise<T | void>((resolve: () => void, reject: () => void) => {}

以上是我要实现的目标。谢谢!

1 个答案:

答案 0 :(得分:1)

以下是您的一些选择:

作为参考,这会导致错误:

new Promise<Date>((resolve, reject) => { }).then((x: Date) => x);
new Promise<Date>((resolve, reject) => { }).then((x: void) => x); // error

仅使用内联类型T | void即可解决错误。

new Promise<Date | void>((resolve, reject) => { }).then((x: Date) => x);
new Promise<Date | void>((resolve, reject) => { }).then((x: void) => x);

另一种方法是创建一个通用的PromiseOrVoid<T>类,如下所示:

class PromiseOrVoid<T> extends Promise<T | void> { }

new PromiseOrVoid<Date>((resolve, reject) => { }).then((x: Date) => x);
new PromiseOrVoid<Date>((resolve, reject) => { }).then((x: void) => x);

这里是all three in a TypeScript fiddle