我有一个通用接口,其中我希望一个属性只包含另一个属性的键,并且具有相同的类型...
interface IMyInterface<T> {
propA: T;
propB: { [key in keyof T]?: T[key] };
}
没问题,我以前做过类似的事情... 基本上我希望它能根据我传递给propA的内容来推断T是什么。
但是我的问题在于,我有一个包含许多IMyInterface类型的字典...
interface IMyDictionary {
[key: string]: IMyInterface;
}
这里是我的问题:上面的定义要求使用一个泛型类型...但我使用的任何类型都会应用到每个属性。如果我使用 any,则会失去意义,因为在声明字典时它假设所有内容都是 any。
interface IInterfaceA {
name: string;
age: number;
}
const objA: IInterfaceA = {
name: 'John',
age: 18
}
const myDictionary: IMyDictionary {
test1: {
propA: objA,
propB: { age: 40 }
}
}
基本上,当上面给myDictionary赋值时,我希望它能推断出propA是IInterfaceA类型,并且在propB中只允许具有字符串类型的name属性和数字类型的age属性。
如果不定义IMyDictionary类型,一次创建每个项目,然后将它们分配给新对象(myDictionary)可以很容易地实现此操作...
const test1: IMyInterface = {
propA: objA,
propB: { age: 40 }
}
const myDictionary = { test1 }
这将为test1推断出通用类型,然后使用确切的属性名称而不是字符串数组来推断myDictionary的类型。但是如果可能的话,我更愿意使用普通的对象赋值语法。
我无法找到一种方式声明IMyDictionary类型以强制它为IMyInterface的每个实例推断通用类型。或者,我可以接受以不同方式定义IMyInterface以推断propB的属性和类型的想法。
提前致谢!