export interface Type {
name: string;
extraField: number;
}
const keyValueMap: { [name: string]: Type } = {
keyOne: {
name: 'keyOne',
extraField: 1,
},
keyTwo: {
name: 'keyTwo',
extraField: 2,
},
};
假设我想使用索引签名定义一个键-值Map,有没有一种方法可以保持DRY并以某种方式避免复制键名?
2条答案
按热度按时间vxf3dgd41#
如果你要求保持DRY than,我不认为在子属性中复制map键名是个好主意,不可避免的是你会用父键名访问对象,所以你已经有了它。你可以从子属性中丢弃name属性。
**如果您坚持保留name属性,则可以利用泛型。**您可以使用下面的代码段,它将限制您只能添加与map属性键相同的键,并为属性名称启用IntelliSense。
tjjdgumg2#
您可以创建一个helper函数,它将接受此类对象的数组并返回一个对象-该函数将为每个输入对象分配一个与其
name
属性值相对应的属性:TSPlayground
从TSPlayground编译的JS: