You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为支持柯里化的range函数添加正确的TypeScript返回类型

问题原因

你遇到的TS报错核心原因是:当前TS无法自动识别range函数不同入参对应的返回值类型。你定义的range函数传1个参数时返回函数,传2个参数时返回数字数组,TS会自动把返回值推导为((end: number) => number[]) | number[]联合类型。当你调用range(3)把返回值赋值给start3时,TS不知道这个返回值是函数还是数组,自然不允许你直接把它当函数调用,就会抛出2349错误。

解决方法

用TypeScript的函数重载功能明确标注不同入参对应的返回值类型即可。

你只需要在原函数定义前添加两个重载声明,原有业务逻辑不需要做任何修改:

// 重载1:仅传start时,返回接收end的函数
function range(start: number): (end: number) => number[];
// 重载2:同时传start和end时,返回数字数组
function range(start: number, end: number): number[];
// 原有函数实现
function range(start: number, end?: number) {
  start = Number(start) || 0;

  if (end === undefined) {
    return function getEnd(end: number) {
      return getRange(start, end);
    };
  } else {
    end = Number(end) || 0;
    return getRange(start, end);
  }

  function getRange(start: number, end: number) {
    var ret: number[] = [];
    for (let i = start; i <= end; i++) {
      ret.push(i);
    }
    return ret;
  }
}

添加重载后TS就可以根据你调用时传的参数数量自动匹配对应的返回值类型:

  • 传1个参数调用range时,TS会识别返回值是可调用的函数,后续调用start3(3)不会报错
  • 传2个参数调用range时,TS会识别返回值是数字数组,可直接调用数组相关方法

内容的提问来源于stack exchange,提问作者lwnash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:06:02