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
相关产品推荐
相关产品推荐

