如何将TypeScript字符串数组转换为字符串字面量联合类型?
如何将字符串数组转换为TypeScript字符串字面量联合类型?
当然可以实现,核心是利用TypeScript的const断言和索引访问类型,步骤如下:
- 首先给数组添加
as const断言,让TypeScript将数组元素锁定为具体的字面量类型,而非宽泛的string:
const arr = ['a', 'b', 'c'] as const;
- 接着通过
typeof获取数组的类型,再用[number]索引访问提取所有元素的类型,就能得到对应的字面量联合类型:
type MyType = typeof arr[number]; // 此时 MyType 等价于 'a' | 'b' | 'c'
为什么要加as const?
如果不加这个断言,TypeScript会默认把arr推断为string[]类型,这时typeof arr[number]只会得到string,无法生成具体的字面量联合。
验证效果
你可以写个函数测试这个类型:
function printValue(val: MyType) { console.log(val); } printValue('a'); // 正常运行 printValue('d'); // TypeScript会报错,因为'd'不在联合类型范围内
内容的提问来源于stack exchange,提问作者TOPKAT
相关产品推荐
相关产品推荐

