如何在TypeScript中获取数组联合类型的所有字符串字面量(避免枚举)
在TypeScript中不使用枚举获取字符串字面量联合类型的所有值
要实现需求的核心点是:TypeScript的类型仅存在于编译阶段,运行时会被擦除,所以无法直接从纯类型(比如'Value1' | 'Value2' | 'Value3')获取对应的运行时值。正确的做法是先定义包含所有字面量的运行时数组,再从数组推导类型,这样类型和运行时值保持一致,无需重复维护。
具体实现
// 定义包含所有字面量的只读数组(as const 让TS推导每个元素的具体字面量类型) const blaValues = ['Value1', 'Value2', 'Value3'] as const; // 从数组推导联合类型 type BlaType = typeof blaValues[number]; // 你的数组变量使用推导出来的类型 const bla: BlaType[] = []; // 直接使用blaValues即可获取所有字面量值 console.log(blaValues); // 输出: ["Value1", "Value2", "Value3"]
关键说明
as const将数组转为只读元组,确保TypeScript能识别每个元素的具体字面量类型(而非宽泛的string类型)。typeof blaValues[number]遍历元组的所有元素类型,生成对应的联合类型'Value1' | 'Value2' | 'Value3'。- 这种方式避免了枚举,同时保证类型和运行时值的一致性,后续新增/修改字面量只需改动
blaValues数组,类型会自动更新。
内容的提问来源于stack exchange,提问作者broadband
相关产品推荐
相关产品推荐

