如何在打字稿中创建从联合类型派生的类型
How to create a type derived from an union type in typescript
我有以下类型
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'>)[]
它基本上是一个新联合类型的数组,映射到 T 的每个键,我想使用泛型,因为这段代码将是可重用的。
这可能吗?
您可以使用 distributive conditional type:
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">)[]
我有以下类型
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'>)[]
它基本上是一个新联合类型的数组,映射到 T 的每个键,我想使用泛型,因为这段代码将是可重用的。 这可能吗?
您可以使用 distributive conditional type:
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">)[]