我试图调用一个函数,该函数根据某些条件使用Promise.resolve
返回一个已解决的承诺。
该函数的一个过于简化的版本如下:
function fullFilledPromiseReturner(num: number) {
if (num > 5) {
return Promise.resolve(5);
} else {
return Promise.resolve();
}
}
fullFilledPromiseReturner(4).then(data => {
console.log(data);
});
现在,TypeScript不让它通过编译器,而是抛出以下错误:
[ts] Cannot invoke an expression whose type lacks a call signature. Type '(<TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResu...' has no compatible call signatures.
我做错了什么?
发布于 2018-03-16 18:26:57
问题是您的函数返回Promise<void> | Promise<number>
,因为您在不同的分支上返回不同的承诺类型。因此,then
也将是一个联合类型,您将无法调用它,因为没有一个签名是通用的。
最简单的解决方案是显式键入函数以返回一个联合类型的Promise
,而不是Promise
的联合:
function fullFilledPromiseReturner(num: number): Promise<number | void> {
if (num > 5) {
return Promise.resolve(5);
} else {
return Promise.resolve();
}
}
fullFilledPromiseReturner(4).then(data => {
console.log(data);
});
https://stackoverflow.com/questions/49327264
复制相似问题