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

TypeScript如何为字符串字面量联合类型加前缀生成新类型

解答

完全可以实现,TypeScript 4.1 及以上版本原生提供的模板字面量类型可以直接满足这个需求,不需要额外的黑科技写法。

你只需要把原来的字符串拼接写法换成类型层面的模板语法即可,TS会自动遍历联合类型的所有成员,生成拼接前缀后的对应字面量联合:

type UserField = "id" | "name";
// 插值位置传入联合类型时,TS会分布式处理所有联合成员
type PostField = "id" | "message" | `author.${UserField}`;

// 以下赋值可正常通过类型校验
let somePostFields: PostField[] = ["id", "message", "author.name", "author.id"];

实现原理

当模板字面量类型的插值位置传入联合类型时,TS会触发分布式类型特性:将联合类型的每一个成员单独和前后的固定字符串拼接,最终把所有拼接结果重新组成联合类型。上述例子中author.${UserField}会被自动推导为"author.id" | "author.name",和你预期的生成规则完全一致。

如果传入了不符合规则的字段,比如给数组加了"author.age"这类不在定义范围内的值,TS会直接抛出类型错误,符合类型校验的要求。

注意:该特性为 TypeScript 4.1 正式新增的语法,低于 4.1 的版本没有原生支持的实现方案,无需额外尝试兼容写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:18:21