如何将数组对象的属性值集合转为联合类型作为函数参数类型?
在TypeScript中基于数组对象属性值定义函数参数类型
要实现让函数参数仅接受数组中对象的name属性值,核心是让TypeScript保留数组中name的具体字面量类型,再提取这些值组成联合类型。
步骤1:让数组保留字面量类型
默认情况下,TypeScript会把数组中name的类型推断为宽泛的string,所以需要用as const断言让数组变成只读的字面量类型数组,这样每个name的具体值会被精准保留:
const columns = [ { name: "first", someProp: true }, { name: "second", someProp: true }, { name: "one more", someProp: true }, ] as const;
如果必须保留SomeType类型,可以直接从这个字面量数组中提取:
type SomeType = typeof columns[number];
步骤2:提取name的联合类型
通过typeof和索引访问语法,提取所有name值的类型组成联合类型:
type ColumnName = typeof columns[number]['name'];
此时ColumnName的类型就是'first' | 'second' | 'one more',完全匹配你需要的可选值范围。
步骤3:定义限制参数类型的函数
直接用ColumnName作为函数参数的类型即可:
function handleColumn(name: ColumnName) { // 编写你的函数逻辑 } // 合法调用,符合类型要求 handleColumn('first'); handleColumn('one more'); // 非法调用,TypeScript会直接抛出类型错误 handleColumn('unknown');
内容的提问来源于stack exchange,提问作者Prvz
相关产品推荐
相关产品推荐

