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

TypeScript中如何动态为联合类型成员追加后缀生成扩展类型

TypeScript 基于已有字面量联合类型自动生成带后缀扩展类型

实现方案

你不需要维护两份独立的数组或类型定义,借助TypeScript原生的模板字面量类型,就可以自动为原有字符串联合类型的所有成员追加_max后缀,合并得到目标扩展类型。

首先保留你已有的基础定义:

const values = ['money', 'land'] as const;
type ValueTypes = typeof values[number];
// 推导结果:type ValueTypes = 'money' | 'land'

通过模板字面量类型遍历原有联合类型,自动生成所有带_max后缀的字面量成员(TypeScript会对联合类型做分布式处理,自动给每个成员套用模板规则):

type MaxSuffixedTypes = `${ValueTypes}_max`;
// 推导结果:type MaxSuffixedTypes = 'money_max' | 'land_max'

将基础类型和后缀类型做联合,就得到最终需要的扩展类型:

type ExtendedValueTypes = ValueTypes | MaxSuffixedTypes;
// 推导结果:type ExtendedValueTypes = 'money' | 'land' | 'money_max' | 'land_max'

使用效果

将函数参数类型替换为扩展类型后,两种传参都能通过类型校验:

const check = (type: ExtendedValueTypes) => 'some return'

// 原有调用正常通过
check('money');
check('land');

// 带_max后缀的调用也能正常通过校验
check('money_max')
check('land_max')

// 传入不存在的非法值会触发类型报错,符合类型约束预期
// check('invalid_value') // 类型错误

后续你只需要修改values数组的成员,扩展类型会自动同步更新,完全不需要手动维护额外的类型列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:24:30