TypeScript中能否基于其他自定义字符串类型构建动态字符串类型?
TypeScript 基于原有字符串联合类型自动生成衍生类型实现方案
完全可以实现自动生成,无需手动枚举所有组合。TypeScript 4.1 及以上版本提供的模板字面量类型,配合联合类型自带的分布式特性,就能零额外成本实现这个需求。
核心实现代码
// 原始字符串联合类型 type Names = "field1" | "field2"; // 统一定义需要拼接的固定后缀 type Suffix = "created" | "updated" | "deleted"; // 自动生成目标衍生联合类型 type FieldsNames = `${Names}_${Suffix}`;
实现效果
上述写法生成的FieldsNames类型,和手动枚举的类型完全等价:
// TS自动推导的结果和手动书写完全一致 type FieldsNames = | "field1_created" | "field1_updated" | "field1_deleted" | "field2_created" | "field2_updated" | "field2_deleted";
维护优势
- 后续给
Names新增任意字符串成员,FieldsNames会自动同步生成对应带三个后缀的类型,不需要修改衍生类型的定义 - 需要调整后缀规则时,仅修改
Suffix的成员即可,所有拼接逻辑自动同步 - 原理是联合类型在模板字面量中会自动做笛卡尔积展开,不需要额外编写类型遍历逻辑,类型计算是TS编译阶段原生完成的,没有额外开销
内容的提问来源于stack exchange,提问作者papryk
相关产品推荐
相关产品推荐

