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

TypeScript函数调用报错:期望2个参数却传入1个的问题排查

解决TypeScript函数参数不匹配报错及函数内部bug

我来帮你搞定这个问题,咱们先拆解下遇到的两个核心问题:参数不匹配的报错,还有函数里隐藏的字符串拼接bug。

为什么会出现「Expected 2 arguments, but got 1」报错?

你写的函数里虽然给zeroPadded加了默认值逻辑,但TypeScript的类型系统没识别到它是可选参数——因为你没有用显式默认值语法定义参数,所以类型检查会认为这个参数是必填项,调用时少传就会触发报错。

另外,函数里还有个容易忽略的小bug:你用双引号包裹了模板字符串("0${hours}"),这会导致变量不会被解析,直接输出"0${hours}"这种无效字符串,得改成反引号才能正确拼接带前导零的格式。

解决方案

方案1:完善函数定义(推荐)

给参数加上显式默认值和类型注解,同时修复模板字符串的问题,这样TypeScript就知道第二个参数是可选的,调用时可以只传第一个参数:

export function minutesToHoursAndMinutes(m: number, zeroPadded: boolean = false) {
  let hours: string | number = Math.floor(m / 60);
  if (zeroPadded && (`${hours}`.length === 1)) {
    hours = `0${hours}`; // 改用反引号解析模板变量
  }
  let minutes: string | number = m % 60;
  if (zeroPadded && (`${minutes}`.length === 1)) {
    minutes = `0${minutes}`; // 同样修复模板字符串
  }
  if ((hours === 24) && (minutes === '00')) {
    hours = 23;
    minutes = 59;
  }
  return [hours, minutes];
};

修改后,两种调用方式都合法:

// 只传分钟数,使用默认的zeroPadded=false
minutesToHoursAndMinutes(135);
// 显式传入第二个参数,指定是否补零
minutesToHoursAndMinutes(135, true);

方案2:调用时显式传入第二个参数

如果暂时不想修改函数,那每次调用都必须传满两个参数,比如:

// 不需要补零就传false
minutesToHoursAndMinutes(90, false);
// 需要补零就传true
minutesToHoursAndMinutes(90, true);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:34:15