首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法调用其类型缺少函数调用签名的表达式返回解析承诺。

无法调用其类型缺少函数调用签名的表达式返回解析承诺。
EN

Stack Overflow用户
提问于 2018-03-16 18:19:46
回答 1查看 9.6K关注 0票数 5

我试图调用一个函数,该函数根据某些条件使用Promise.resolve返回一个已解决的承诺。

该函数的一个过于简化的版本如下:

代码语言:javascript
运行
复制
  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.

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-16 18:26:57

问题是您的函数返回Promise<void> | Promise<number>,因为您在不同的分支上返回不同的承诺类型。因此,then也将是一个联合类型,您将无法调用它,因为没有一个签名是通用的。

最简单的解决方案是显式键入函数以返回一个联合类型的Promise,而不是Promise的联合:

代码语言:javascript
运行
复制
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);
});
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49327264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档