让我们说我有一些对象,每个对象都包含一些类型相似的属性
interface Stuff<T> {
a: number;
b: string;
c: T;
}
type ThingOne {
one: Stuff<string>;
}
type ThingTwo {
two: Stuff<number>;
}
type ThingThree {
three: Stuff<boolean>;
}
我可以使用泛型参数化属性名称吗? 我在想一些类似的事情:
interface Thing<T, U> {
[key: U]: Stuff<T>;
}
// then
type ThingOne = Thing<string, 'one'>;
type ThingTwo = Thing<number, 'two'>;
type ThingThree = Thing<boolean, 'three'>;
显然[key: U]
是错误的。我似乎无法弄清楚应该是什么,甚至可能。
答案 0 :(得分:1)
您可以使用内置映射类型Record
,该映射类型采用string
文字类型(或字符串文字类型的并集)作为属性名称,以及成员的类型:
interface Stuff<T> {
a: number;
b: string;
c: T;
}
type ThingOne = Record<'one', Stuff<string>>;
type ThingTwo = Record<'two', Stuff<number>>;
type ThingThree = Record<'three', Stuff<boolean>>;