首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在TypeScript中向curried函数添加类型?

如何在TypeScript中向curried函数添加类型?
EN

Stack Overflow用户
提问于 2019-05-31 03:00:58
回答 1查看 48关注 0票数 0

在下面的代码片段中,我声明了一个curried add方法。

代码语言:javascript
复制
const add = (a: number) => {
  return (b?: number) => {
    return (b === undefined ? a : add(a + b))
  }
}

如果我使用以下参数调用它,则可以很好地工作:add(1)()

但是当我像这样调用typescript时,它会抛出以下错误:add(1)(2)()

代码语言:javascript
复制
Cannot invoke an expression whose type lacks a call signature. Type 'number | ((b?: number) => number | ...)' has no compatible call signatures.

我需要添加什么才能启用此方法的类型化使用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-31 03:18:50

我会用以下Add类型来描述add()的类型:

代码语言:javascript
复制
type Add = (a: number) => Add2;
type Add2 = ((b: number) => Add2) & (() => number);

Add函数类型接受一个数字并返回一个Add2

Add2函数类型是一个overloaded函数,它根据传入参数的数量和类型返回不同的类型。它也是自引用的:如果用number参数调用Add2,就会得到一个Add2

您或多或少需要使用assertions来使编译器相信您的add()是有效的Add

代码语言:javascript
复制
const add = ((a: number) => (b?: number) =>
  b === undefined ? a : add(a + b)) as Add;

然后你应该能够像预期的那样使用它:

代码语言:javascript
复制
const x = add(1)(2)(3)(); // number
console.log(x); // 6

Link to code

好的,希望这会有帮助;祝你好运!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56384165

复制
相关文章

相似问题

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