Typescript 引用同一接口中定义的其他类型 接口A{ str:字符串; num:数字; } 接口B{ 键:A的键; 类型:; }
如果我想让Typescript 引用同一接口中定义的其他类型 接口A{ str:字符串; num:数字; } 接口B{ 键:A的键; 类型:; },typescript,types,Typescript,Types,如果我想让type与key指向的A中的类型对应,而B不是泛型,那么type应该是什么类型 我可以将type设置为A[keyof A],但这样它就不会匹配键 我也可以在A的K扩展键上设置B泛型,然后设置key:K和type:A[K],但我想知道,如果B不是泛型,我是否可以这样做 理想情况下,我想创建一个类型为B的对象,TypeScript会推断,如果我的对象有一个值为num的键key,那么它也必须有一个值为number的键type,你不能用接口来确保这一点,你可以用一个并集,您可以使用映射类型从
type
与key
指向的A
中的类型对应,而B
不是泛型,那么type应该是什么类型
我可以将type
设置为A[keyof A]
,但这样它就不会匹配键
我也可以在A的K扩展键上设置B
泛型,然后设置key:K
和type:A[K]
,但我想知道,如果B
不是泛型,我是否可以这样做
理想情况下,我想创建一个类型为B
的对象,TypeScript会推断,如果我的对象有一个值为num
的键key
,那么它也必须有一个值为number的键type
,你不能用接口来确保这一点,你可以用一个并集,您可以使用映射类型从接口生成联合:
interface A {
str: string;
num: number;
}
type B = {
[P in keyof A]: {
key: P;
type: A[P]
};
}[keyof A]
B
相当于:
type B = {
key: "str";
type: string;
} | {
key: "num";
type: number;
}
您不能使用接口来确保这一点,您可以使用联合来确保这一点,您可以使用映射类型从接口生成联合:
interface A {
str: string;
num: number;
}
type B = {
[P in keyof A]: {
key: P;
type: A[P]
};
}[keyof A]
B
相当于:
type B = {
key: "str";
type: string;
} | {
key: "num";
type: number;
}