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;
}