0

我有以下类型

type DataTableCol<T, K extends keyof T> = {
  title: string;
  key: K;
  render?: (value: T[K]) => ReactElement;
};

我需要创建另一种类型,DataTableRow<T>从它派生。从type MyData = { name: string; value: number; },它将具有以下形式:

type DataTableRow<MyData> = (DataTableCol<MyData, 'name'> | DataTableCol<MyData, 'value'>)[]

它基本上是一个新联合类型的数组,为每个 keyof T 映射,我想使用泛型,因为这段代码是可重用的。这可能吗?

4

1 回答 1

1

您可以使用分布式条件类型

type DataTableCol<T, K extends keyof T> = {
  title: string;
  key: K;
  render?: (value: T[K]) => any;
};

type Distribute<T, K> = K extends keyof T ? DataTableCol<T, K> : never;

type DataTableRow<T> = (Distribute<T, keyof T>)[];

type MyData = { name: string; value: number; };

type Foo = DataTableRow<MyData>;
// (DataTableCol<MyData, "name"> | DataTableCol<MyData, "value">)[]

操场

于 2022-02-19T01:26:58.673 回答