Typescript:使用动态字段名获取唯一的值列表

Typescript:使用动态字段名获取唯一的值列表,typescript,Typescript,有一节课。比如说: class Foo { a: string; b: number; } 和一个函数来获取新的唯一值集 getUniqueSet<T, K extends keyof T>(arr: T[], key: K): Set<T[K]> { return new Set<T[K]>(arr.map(item => item[key])) } 我的目标是传递一组字段名(fieldNames),并基于foos数据收集为每个字段获取

有一节课。比如说:

class Foo {
  a: string;
  b: number;
}
和一个函数来获取新的唯一值集

getUniqueSet<T, K extends keyof T>(arr: T[], key: K): Set<T[K]> {
  return new Set<T[K]>(arr.map(item => item[key]))
}

我的目标是传递一组字段名(
fieldNames
),并基于
foos
数据收集为每个字段获取唯一值。

简单:您可以将
fieldNames
定义为Foo
(keyof Foo)[
的键数组。 并非所有字符串都是Foo的键,因此编译器会给出一个错误

const fieldNames: (keyof Foo)[] = ['a', 'b'];
const foos: Foo[] = [{ a: '1', b: 1 }, { a: '2', b: 2 }];

fieldNames.forEach((fieldName) => {
  // Simplified code
  let uniqueSet = getUniqueSet(foos, fieldName);
});

简单:您可以将
字段名定义为Foo
(keyof Foo)[
的键数组。 并非所有字符串都是Foo的键,因此编译器会给出一个错误

const fieldNames: (keyof Foo)[] = ['a', 'b'];
const foos: Foo[] = [{ a: '1', b: 1 }, { a: '2', b: 2 }];

fieldNames.forEach((fieldName) => {
  // Simplified code
  let uniqueSet = getUniqueSet(foos, fieldName);
});

谢谢,成功了,谢谢,成功了。