我正在为我的数据提供一个公共接口,但出于性能和内存的原因,我想使用一个Object,而不是一个Class。接口上没有代码,它纯粹是一种数据结构。
我希望能够将我的对象声明为使用接口,这样如果我更改接口,它将显示为错误并且不会错过。
interface DataStructure {
key1: string;
key2: number;
key3: boolean;
key4: null;
}
const defaultData: {[key: string]: PropertyDescriptor} = {
key1: {writable: true, enumerable: true},
key2: {writable: true, enumerable: true},
key3: {writable: true, enumerable: true}
};
var myData = Object.create(null, defaultData);
我希望此报告key4
对象中缺少defaultData
的错误,但现在还不能弄清楚。
(这是需要的,因为可能需要相同结构的数万个对象,并且当它们更容易重新使用它们时不想浪费GC - 也只想简单地映射存储,所以不需要对象原型链。)
答案 0 :(得分:1)
我认为这就是你要找的东西:
const defaultData: {[K in keyof DataStructure]: PropertyDescriptor} = {
...
}
然后编译器将编译说:
键入' {key1:{writable:true;可枚举的:真实的; }; key2:{writable: 真正;可枚举的:真实的; }; KEY3:...'不能分配给' { key1:PropertyDescriptor; key2:PropertyDescriptor; KEY3: PropertyDescriptor的; key4:PropertyDes ......'。
财产' key4'类型' {key1:{writable:true; 可枚举的:真实的; }; key2:{writable:true;可枚举的:真实的; }; KEY3:...'