没有类的 JavaScript/Typescript 可链接函数

标签 javascript typescript chaining chainable

我正在尝试在 Typescript 中正确编码我的可链接函数。下面是代码

  const sum = (val: number | undefined) => {
    let internal = Number(val);
    if (val) {
      return function sumup(_val: number | undefined) {
        if (_val && internal !== undefined) {
          internal += _val;
          return sumup;
        }
        return internal;
      };
    }
    return internal;
  };

  console.log('sum:', sum(1)(2)(3)());

该函数正在运行,我得到了正确的结果。但是,它会产生 typescript 错误:此表达式不可调用。并非所有类型“number |”的成分((_val: number | undefined) => number | ...)' 是可调用的。输入“号码”没有调用签名。

在不使用 classthis 的情况下,如何正确编写这样的 sum 函数?

最佳答案

您可以通过使用 function overloads 精确描述函数行为来实现此目的:

function sum(): number
function sum(val: number): typeof sum
function sum(val?: number): number | typeof sum {
  let internal = Number(val);
  if (val) {
    function sumup(): number
    function sumup(_val: number): typeof sumup
    function sumup(_val?: number): number | typeof sumup {
      if (_val && internal !== undefined) {
        internal += _val;
        return sumup;
      }
      return internal;
    };
    return sumup;
  }
  return internal;
};

console.log('sum:', sum(1)(2)(3)());

TypeScript playground

关于没有类的 JavaScript/Typescript 可链接函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71173447/

相关文章:

javascript - 替换字符串的脚本在某些网站上不起作用

css - 如何在带有情感主题的样式化组件和插值中实现?

typescript TS5042 内部版本 : Option 'project' cannot be mixed with source files on a command line

c++ - 为什么在赋值运算符重载中返回引用?

javascript - Vite.js(Vue): Unwanted Page Reload Happens Only On Samsung Internet

javascript - 使用js从页面选项卡查找当前页面

javascript - 在 iframe 元素中的 srcdoc 属性中使用链接时,链接相对于什么?

TypeScript 提示有和没有 lib

angular - ngrx - 带有错误处理的效果链 : fetch data from second api if first api fetch was successful

php - 配置对象中的属性链接和 isset