如何从常量对象数组提取属性值生成TypeScript字符串联合类型?
提取对象数组指定属性的字面量联合类型
你已经用as const把数组转为只读元组,这一步保留了每个属性的精确字面量类型,接下来直接通过类型索引就能生成目标联合类型:
const options = [ { label: 'First Name', value: 'firstName' }, { label: 'Last Name', value: 'lastName' }, { label: 'Email', value: 'email' } ] as const; // 直接生成目标联合类型 type Values = typeof options[number]['value']; // Values 等价于 'firstName' | 'lastName' | 'email'
原理拆解:
typeof options获取数组的只读元组类型,包含每个元素的字面量细节[number]索引元组,得到所有数组元素的类型联合['value']提取每个元素的value属性类型,最终组合成字符串字面量联合
如果想拆分步骤更清晰,也可以先定义数组元素类型再提取属性:
type Option = typeof options[number]; type Values = Option['value'];
你用map得到数组类型是因为Array.prototype.map的返回值本身就是数组结构,会把元素类型包装成数组而非直接返回联合类型。如果需要同时得到这个数组常量,可基于Values类型断言:
const values = options.map(x => x.value) as Values[];
内容的提问来源于stack exchange,提问作者Jameson
相关产品推荐
相关产品推荐

