据我了解,这两个函数在JavaScript中的行为相同:
const whatever1 = (): Promise<number> => {
return new Promise((resolve) => {
resolve(4);
});
};
const whatever2 = async (): Promise<number> => {
return new Promise((resolve) => {
resolve(4);
});
};
但是TypeScript似乎不喜欢第二个,它说:
Type '{}' is not assignable to type 'number'.
这是TypeScript中的错误,还是我对异步功能有误解?
情况很复杂。
首先,在这段代码中
const p = new Promise((resolve) => {
resolve(4);
});
的类型p
推断为Promise<{}>
。在打字稿github上有一个关于此的公开问题,因此可以说这是一个错误,因为(对于人类而言)显然p
应该是Promise<number>
。
然后,Promise<{}>
与兼容Promise<number>
,因为一个Promise基本上唯一的属性是then
method,并且then
根据函数类型兼容性的打字稿规则在这两个Promise类型中兼容。因此,中没有错误whatever1
。
但是的目的async
是假装您正在处理实际值,而不是承诺,然后您会收到错误消息,whatever2
因为{}
显然与不兼容number
。
因此async
行为是相同的,但是当前需要一些解决方法来使Typescript对其进行编译。创建这样的promise时,您可以简单地提供显式的泛型参数:
const whatever2 = async (): Promise<number> => {
return new Promise<number>((resolve) => {
resolve(4);
});
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句