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

TypeScript中如何处理string | number类型并实现数值加值操作?

TypeScript 处理 string | number 类型变量加40的实现方案

问题根源在于 parseInt 仅接受 string 类型参数,而你的变量是 string | number 联合类型,直接传递会触发类型不兼容错误。解决核心是通过类型守卫区分两种类型,分别处理:

基础实现方案

function add40(x: string | number): string | number {
  // 类型守卫:判断是否为number类型
  if (typeof x === 'number') {
    return x + 40;
  }
  // 此时TypeScript自动收窄x为string类型,可安全调用parseInt
  const num = parseInt(x, 10); // 建议指定第二个参数10(十进制),避免解析异常
  // 处理字符串无法解析为数字的边界情况(如"abc")
  if (isNaN(num)) {
    // 可根据业务需求调整:返回原字符串/抛出错误/返回默认值等
    return x;
  }
  return (num + 40).toString();
}

更精确的类型重载方案

如果需要严格保持输入输出类型一致(输入number返回number,输入string返回string),可以用函数重载让类型提示更精准:

// 重载签名:定义不同输入对应的输出类型
function add40(x: number): number;
function add40(x: string): string;
// 实现签名:处理联合类型逻辑
function add40(x: string | number): string | number {
  if (typeof x === 'number') {
    return x + 40;
  }
  const num = parseInt(x, 10);
  if (isNaN(num)) {
    return x;
  }
  return (num + 40).toString();
}

// 使用时TypeScript会自动推断返回类型
const numResult = add40(10); // numResult类型为number
const strResult = add40("20"); // strResult类型为string

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:45:28