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

TypeScript如何实现参数类型决定返回类型的箭头函数?

报错原因

你定义的Converter是两个函数类型的联合类型,TypeScript 处理函数联合类型的调用时,会取所有函数入参类型的交集作为合法入参类型。number和string的交集是never,因此无论传入什么类型的参数都会触发类型报错。

修复方案

方案1:使用函数重载(最符合需求的原生写法)

直接定义两套重载签名,TS 会自动根据入参类型匹配对应的返回类型:

// 重载签名
function convert(input: number): string
function convert(input: string): number
// 实现签名
function convert(input: number | string): number | string {
  if (typeof input === 'number') return String(input)
  return Number(input)
}

const x = convert(7) // 自动推导为 string 类型
const y = convert('123') // 自动推导为 number 类型

方案2:泛型条件类型实现箭头函数版本

如果你需要用箭头函数的写法,可以配合泛型条件类型定义返回值:

type ConvertReturn<T extends number | string> = T extends number ? string : number

const convert = <T extends number | string>(val: T): ConvertReturn<T> => {
  if (typeof val === 'number') {
    return String(val) as ConvertReturn<T>
  }
  return Number(val) as ConvertReturn<T>
}

const x = convert(7) // 推导为 string 类型
const y = convert('123') // 推导为 number 类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:27:01