You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数组对象的属性值集合转为联合类型作为函数参数类型?

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:22:16