如何在TypeScript中实现联合字符串类型的分隔符拼接泛型
TypeScript 实现联合类型字符串拼接泛型
Join<T, Separator> 可以实现这个泛型类型,核心是利用TypeScript的分布式条件类型和递归逻辑,遍历联合类型的所有成员并完成拼接。
实现代码
type UnionStr = 'foo' | 'bar' | 'baz'; type Join<T extends string, Separator extends string> = T extends infer U extends string ? (U extends any ? `${U}${Exclude<T, U> extends never ? '' : `${Separator}${Join<Exclude<T, U>, Separator>}`}` : never) : never; // 测试示例 type Test = Join<UnionStr, ','>; // 结果为 "foo,bar,baz"
代码说明
- 通过
T extends infer U extends string提取联合类型中的单个成员U - 使用
Exclude<T, U>获取去掉当前成员后的剩余联合类型 - 若剩余类型为
never(即当前是最后一个成员),直接返回当前成员;否则拼接当前成员、分隔符,再递归处理剩余联合类型 - 借助TypeScript的分布式条件类型特性,自动遍历联合类型的所有成员完成完整拼接
注意:该实现仅适用于字符串字面量组成的联合类型,若联合类型包含非字符串成员,需额外添加类型约束处理。
内容的提问来源于stack exchange,提问作者tmhao2005
相关产品推荐
相关产品推荐

