我很好奇如何实现这种事情:
我有一些对象数组传递给图表组件,例如:
type ChartData = { label: string; value: number }[];
const data: ChartData = [{ label: "Mon", value: 3 }, { label: "Tue", value: 7 }];
但是,在某些情况下,我需要使用其他键代替value
键。如何从ChartData创建泛型类型,以便将键等于将字符串传递给泛型的对象。
例如:
type ChartData<T> = { label: string; [T]: number }[];
type NewType = ChartData<"newkey">
const data: NewType = [{ label: "Mon", newkey: 3 }, { label: "Tue", newkey: 7 }]; // OK
任何想法该怎么做?甚至有可能吗?
答案 0 :(得分:2)
当然,您可以这样做:
type ChartData<K extends keyof any = "value"> =
Array<{ label: string; } & Record<K, number>>;
这使用Record<K, number>
utility type,它是mapped type {[P in K]: number}
的有用的类型别名。因此,您还可以使用:
type ChartData<K extends keyof any = "value"> =
Array<{ label: string; } & {[P in K]: number}>;
以您尝试使用它的方式起作用:
const data: ChartData = [{ label: "Mon", value: 3 }, { label: "Tue", value: 7 }];
type NewType = ChartData<"newkey">
const newData: NewType = [{ label: "Mon", newkey: 3 }, { label: "Tue", newkey: 7 }];
希望有所帮助;祝你好运!