在TypeScript中的异步函数中返回Promise

傻瓜:

据我了解,这两个函数在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中的错误,还是我对异步功能有误解?

artem:

情况很复杂。

首先,在这段代码中

const p = new Promise((resolve) => {
    resolve(4);
});

的类型p推断为Promise<{}>在打字稿github上有一个关于此的公开问题,因此可以说这是一个错误,因为(对于人类而言)显然p应该是Promise<number>

然后,Promise<{}>与兼容Promise<number>,因为一个Promise基本上唯一的属性是thenmethod,并且then根据函数类型兼容性的打字稿规则在这两个Promise类型中兼容因此,中没有错误whatever1

但是的目的async是假装您正在处理实际值,而不是承诺,然后您会收到错误消息,whatever2因为{}显然与不兼容number

因此async行为是相同的,但是当前需要一些解决方法来使Typescript对其进行编译。创建这样的promise时,您可以简单地提供显式的泛型参数:

const whatever2 = async (): Promise<number> => {
    return new Promise<number>((resolve) => {
        resolve(4);
    });
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章