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

如何将TypeScript联合类型限制为仅含user开头的元素?

从TypeScript联合类型中筛选以特定前缀开头的成员

你之前的写法无效,是因为直接把整个options联合类型当作判断主体,TypeScript会将其视为一个整体检查是否匹配user${infer T},而非逐个遍历联合里的元素。

要实现逐个元素筛选,得用TypeScript的分布式条件类型——当条件类型的泛型参数是联合类型时,TypeScript会自动把条件应用到联合的每个成员上,最终返回筛选后的联合结果。

代码实现

首先保留原联合类型:

type options =
    | "user"
    | "user_ID"
    | "user_active"
    | "location"
    | "location_address";

然后定义筛选用的泛型类型:

// 筛选以"user"开头的成员
type FilterUserOptions<T> = T extends `user${string}` ? T : never;

// 最终得到的类型:"user" | "user_ID" | "user_active"
type UserOnlyOptions = FilterUserOptions<options>;

补充:提取前缀后的部分

如果需要提取user前缀之后的内容,可以用infer语法:

type FilterUserOptionsWithInfer<T> = T extends `user${infer Rest}` ? Rest : never;

// 得到的结果:"" | "_ID" | "_active"
type UserOptionRestParts = FilterUserOptionsWithInfer<options>;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:12:41