如何从const数组构造其值的联合类型?
从const数组生成元素值的联合类型
你已经通过as const将数组声明为只读元组,这一步保留了每个元素的具体字面量类型,是实现需求的前提。要得到数组元素值的联合类型SpecialNumber,可以结合typeof操作符和索引访问类型来实现:
const specialNumbers = [1, 10, 20, 50] as const; // 构造目标联合类型 type SpecialNumber = typeof specialNumbers[number]; // 此时 SpecialNumber 的类型等价于 1 | 10 | 20 | 50
原理说明
typeof specialNumbers会获取到数组的元组类型:readonly [1, 10, 20, 50]- 使用
[number]索引该元组类型,TypeScript会自动返回元组中所有元素类型的联合集合
使用示例
按照你的需求场景,这样就能正确约束返回值类型:
const getSpecialNumber = (): SpecialNumber => { // 返回数组内的任意值都符合类型要求 return 20; };
内容的提问来源于stack exchange,提问作者Valentin Vignal
相关产品推荐
相关产品推荐

