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

如何在带守卫子句的函数中使用void与number类型?

问题分析与解决方案

首先,你遇到的两个报错本质是对TypeScript返回类型的误解:

  • void | number 不合法是因为TypeScript不允许将void与其他类型组成联合返回类型,void仅能单独作为函数返回类型使用(表示函数没有可被使用的返回值,调用者应该忽略返回结果)。而你在守卫子句里写return;时,实际返回的是undefined,不是void。
  • 仅指定number作为返回值时报错,是因为当one或two小于0时,函数会返回undefined,但你声明的返回类型是number,类型不匹配。

可行的解决方案

方案1:将返回类型改为number | undefined

直接匹配函数实际的返回值(要么返回数字,要么返回undefined),类型声明和实际逻辑一致:

function addTwoNumbers(one: number, two: number): number | undefined {
  if (one < 0 || two < 0) return;
  return one + two;
}

const result = addTwoNumbers(-5, -5);
console.log(result); // 输出undefined

方案2:守卫子句抛出错误(确保函数始终返回number)

如果你的逻辑是不允许传入负数,可以在守卫子句里抛出错误,这样函数只有在合法输入时才会返回number,不会出现返回undefined的情况:

function addTwoNumbers(one: number, two: number): number {
  if (one < 0 || two < 0) throw new Error("输入不能为负数");
  return one + two;
}

const result = addTwoNumbers(2, 3);
console.log(result); // 输出5

方案3:使用默认值处理返回结果

如果你希望调用者不用处理undefined,可以在调用时给返回结果设置默认值:

function addTwoNumbers(one: number, two: number): number | undefined {
  if (one < 0 || two < 0) return;
  return one + two;
}

const result = addTwoNumbers(-5, -5) ?? 0; // 给undefined设置默认值0
console.log(result); // 输出0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:40:29