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

