打字稿命名函数的不同行为。错误无法调用类型缺少调用签名的表达式

ZenVentzi
type ResolverFn = () => any;

// type Notifications = () => any | number; // works as expected
type Notifications = ResolverFn | number; 
// when using the named function, ResolverFn, it fails with  error:
// "Cannot invoke an expression whose type lacks a call signature. Type 'Notifications' has no compatible call signatures."
// but it works with the unnamed () => any

type Query = {
  notifications: Notifications;
};

const Query: Query = {
  notifications() {}
};


const notifications: Notifications = () => {};

notifications();
Query.notifications();

上面的例子非常简单,是从更复杂的例子中推导出来的。实际上,没有一种类型的签名是函数或数字。在这里,它只是用来展示行为上的差异。

还有与此错误相关的其他问题,但我找不到我的具体问题的答案:

为什么命名和未命名函数有不同的行为?这是预期的行为吗?为什么?有解决方法吗?假设问题是来自我们无法修改的外部程序包,即使它可能是错误的。

打字稿副本

英戈·布尔克(IngoBürk)

内联函数类型“起作用”的原因是因为它没有按照您认为的那样做:它描述了any | number由于优先规则而返回的函数注意区别:

// A function returning either any or number 
type A = () => any | number;

// Either a function returning any — or a number 
type B = (() => any) | number;

否则它不起作用的原因是因为不清楚notifications函数类型,它也可能是数字,并且数字不可调用。

如@Przemyslaw Pietrzak的答案所指出的,请使用类型防护来缩小类型:

if (typeof notifications === "function") {
    notifications();
} 

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

打字稿,具有 2 种类型参数和返回值的函数:无法调用类型缺少调用签名的表达式

来自分类Dev

错误TS2349:无法调用类型缺少调用签名的表达式

来自分类Dev

TypeScript编译错误无法调用类型缺少调用签名的表达式

来自分类Dev

无法调用类型缺少调用签名的表达式 TypeScript 错误

来自分类Dev

无法调用类型缺少调用签名的表达式。类型没有兼容的调用签名

来自分类Dev

错误 - PerfectScrollbar : 无法调用类型缺少调用签名的表达式。“号码”类型没有兼容的呼叫签名

来自分类Dev

无法调用类型缺少调用签名的表达式,而它有签名

来自分类Dev

使用 typescript-2.x 的承诺给出错误:无法调用类型缺少调用签名的表达式

来自分类Dev

TS2349:无法调用类型缺少调用签名的表达式

来自分类Dev

Typescript编译器无法调用类型缺少调用签名的表达式

来自分类Dev

Typescript 无法调用类型缺少调用签名的表达式

来自分类Dev

无法调用类型缺少调用签名、map 的表达式

来自分类Dev

如何解决错误:(4, 1) TS2349:无法调用类型缺少调用签名的表达式。类型“typeof moment”没有兼容的调用签名

来自分类Dev

TS:在动态定义时无法调用其类型缺少调用签名的表达式,但它可以工作

来自分类常见问题

无法调用类型缺少呼叫签名的表达式

来自分类Dev

打字稿错误:此表达式不可调用。类型'typeof import(“ koa-session”)'没有呼叫签名

来自分类Dev

TS2351:不能对类型缺少调用或构造签名的表达式使用'new'。猫鼬

来自分类Dev

如何修复“ TS2349:无法调用类型缺少呼叫签名的表达式”

来自分类Dev

typescript无法调用类型缺少呼叫签名的表达式吗?

来自分类Dev

如何在 angular 4 中修复“不能将'new'与类型缺少调用或构造签名的表达式一起使用”?

来自分类Dev

TypeScript类型断言错误:'此表达式不可调用类型'...'没有调用签名'是由缺少分号引起的

来自分类Dev

无法在&&表达式左侧调用的函数内出现错误

来自分类Dev

缺少调用构造函数的'()'

来自分类Dev

“表达式必须具有类类型”错误,尝试调用类函数

来自分类Dev

类型“文件”的表达式“目标”不能作为函数调用

来自分类Dev

调用动作时无法在ReturnToAction中转换表达式类型错误

来自分类Dev

错误:无法在需要const表达式的地方调用非'const'构造函数

来自分类Dev

在 C 中调用函数时的预期表达式错误

来自分类Dev

打字稿:类型中缺少索引签名

Related 相关文章

  1. 1

    打字稿,具有 2 种类型参数和返回值的函数:无法调用类型缺少调用签名的表达式

  2. 2

    错误TS2349:无法调用类型缺少调用签名的表达式

  3. 3

    TypeScript编译错误无法调用类型缺少调用签名的表达式

  4. 4

    无法调用类型缺少调用签名的表达式 TypeScript 错误

  5. 5

    无法调用类型缺少调用签名的表达式。类型没有兼容的调用签名

  6. 6

    错误 - PerfectScrollbar : 无法调用类型缺少调用签名的表达式。“号码”类型没有兼容的呼叫签名

  7. 7

    无法调用类型缺少调用签名的表达式,而它有签名

  8. 8

    使用 typescript-2.x 的承诺给出错误:无法调用类型缺少调用签名的表达式

  9. 9

    TS2349:无法调用类型缺少调用签名的表达式

  10. 10

    Typescript编译器无法调用类型缺少调用签名的表达式

  11. 11

    Typescript 无法调用类型缺少调用签名的表达式

  12. 12

    无法调用类型缺少调用签名、map 的表达式

  13. 13

    如何解决错误:(4, 1) TS2349:无法调用类型缺少调用签名的表达式。类型“typeof moment”没有兼容的调用签名

  14. 14

    TS:在动态定义时无法调用其类型缺少调用签名的表达式,但它可以工作

  15. 15

    无法调用类型缺少呼叫签名的表达式

  16. 16

    打字稿错误:此表达式不可调用。类型'typeof import(“ koa-session”)'没有呼叫签名

  17. 17

    TS2351:不能对类型缺少调用或构造签名的表达式使用'new'。猫鼬

  18. 18

    如何修复“ TS2349:无法调用类型缺少呼叫签名的表达式”

  19. 19

    typescript无法调用类型缺少呼叫签名的表达式吗?

  20. 20

    如何在 angular 4 中修复“不能将'new'与类型缺少调用或构造签名的表达式一起使用”?

  21. 21

    TypeScript类型断言错误:'此表达式不可调用类型'...'没有调用签名'是由缺少分号引起的

  22. 22

    无法在&&表达式左侧调用的函数内出现错误

  23. 23

    缺少调用构造函数的'()'

  24. 24

    “表达式必须具有类类型”错误,尝试调用类函数

  25. 25

    类型“文件”的表达式“目标”不能作为函数调用

  26. 26

    调用动作时无法在ReturnToAction中转换表达式类型错误

  27. 27

    错误:无法在需要const表达式的地方调用非'const'构造函数

  28. 28

    在 C 中调用函数时的预期表达式错误

  29. 29

    打字稿:类型中缺少索引签名

热门标签

归档