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

TypeScript如何实现接收纯数字/纯字符串数组并返回去重同类型数组的函数

解决方案

你遇到的报错是因为TS无法自动推导联合类型数组对应的Set构造函数重载,有两种常用实现方式可以同时满足类型约束和无报错要求:

方案1:函数重载

明确声明两种合法的入参出参对应关系,实现层用兼容类型处理逻辑:

// 重载签名:仅允许纯数字/纯字符串数组输入,对应返回同类型数组
function f(arr: number[]): number[]
function f(arr: string[]): string[]
// 实现签名
function f(arr: (number | string)[]): (number | string)[] {
    return [...new Set(arr)]
}

调用校验效果完全符合预期:

  • f([1,2,3]) 校验通过,返回值类型为number[]
  • f(['1','2','3']) 校验通过,返回值类型为string[]
  • f([1,2,'3','4']) 触发类型报错,不允许混合类型
  • f([true, {}, 1]) 触发类型报错,不允许其他类型元素

方案2:泛型约束(更简洁)

通过泛型锁定数组元素的单一类型,约束泛型仅支持number或string即可:

const f = <T extends number | string>(arr: T[]): T[] => {
    return [...new Set(arr)]
}

该方案的调用校验效果和函数重载完全一致,代码更精简。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:06:07