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

TypeScript中如何让函数返回类型T指定属性的类型数组?

实现类型安全的extractDistinct函数

要让TypeScript自动推导返回值为目标字段的类型数组,核心是利用泛型关联数组元素类型与字段名,具体实现如下:

function extractDistinct<T, K extends keyof T>(array: T[], fieldName: K): T[K][] {
  const distinctValues = new Set(array.map(item => item[fieldName]));
  return Array.from(distinctValues);
}

代码说明

  • 泛型T:代表数组中元素的类型,由传入的数组自动推断。
  • 泛型K extends keyof T:约束fieldName必须是T类型的合法属性名,同时让TypeScript关联到该属性对应的类型T[K]。
  • 返回值直接定义为T[K][],无需手动类型断言,TypeScript会根据输入自动推导具体类型。

使用示例

// 定义示例类型
type User = {
  id: number;
  name: string;
  role: 'admin' | 'user' | 'guest';
};

const users: User[] = [
  { id: 1, name: 'Alice', role: 'admin' },
  { id: 2, name: 'Bob', role: 'user' },
  { id: 3, name: 'Alice', role: 'admin' },
  { id: 4, name: 'Charlie', role: 'guest' },
];

// 自动推导返回类型为string[]
const distinctNames = extractDistinct(users, 'name');
// 自动推导返回类型为("admin" | "user" | "guest")[]
const distinctRoles = extractDistinct(users, 'role');
// 自动推导返回类型为number[]
const distinctIds = extractDistinct(users, 'id');

这样实现后,函数不仅能校验fieldName的合法性,还能让返回值类型完全匹配目标字段的类型,彻底告别手动类型断言。

内容的提问来源于stack exchange,提问作者Oli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:00:49