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

如何筛选TypeScript联合类型,仅保留字符串或数字类型?

TypeScript联合类型筛选实现方案

方案一:按类型名称字符串筛选

如果你需要通过传入'number'或'string'这类字符串指定筛选目标,可以这样定义Filter类型:

type Filter<T, K extends 'number' | 'string'> = T extends (K extends 'number' ? number : string) ? T : never;

// 使用示例
type all = 'a' | 'b' | 'c' | 1 | 2 | 3;
type numbers = Filter<all, 'number'>; // 结果为 1 | 2 | 3
type strings = Filter<all, 'string'>; // 结果为 'a' | 'b' | 'c'

这个类型利用了TypeScript条件类型的分布式特性:当T是联合类型时,会逐个检查每个成员是否匹配目标类型(根据K的值判断是number还是string),匹配的成员被保留,不匹配的则被排除为never。

方案二:直接传入目标类型筛选

如果更倾向于直接指定目标类型(类似类型谓词的思路),可以简化Filter的定义,直接传入number或string作为筛选条件:

type Filter<T, U> = T extends U ? T : never;

// 使用示例
type all = 'a' | 'b' | 'c' | 1 | 2 | 3;
type numbers = Filter<all, number>; // 结果为 1 | 2 | 3
type strings = Filter<all, string>; // 结果为 'a' | 'b' | 'c'

这种写法更直观,本质是从联合类型T中提取所有属于U的成员,同样依赖条件类型的分布式特性逐个处理联合类型的每个元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:57:11