2017-10-06 72 views
0

今天我发现了Typescript'map'类型,我想用它来声明一个键值字典。我知道我可以用数组来做,但它只是用来玩游戏。我想要做的是声明一个变量来的图标的类别字符串指定给对象类型,所以:Typescript中的替代地图定义

iconForObjectType [OBJ_TYPE(数)] ===>图标类(字符串)

的代码是:

let iconForObjectType : { [obj_type : number] : string } = {}; 

iconForObjectType[ObjectTypes.OBJ_COMPUTER] = 'icon_computer'; 
iconForObjectType[ObjectTypes.OBJ_PRINTER] = 'icon_printer'; 
iconForObjectType[ObjectTypes.OBJ_SCANNER] = 'icon_scanner'; 
iconForObjectType[ObjectTypes.OBJ_MONITOR] = 'icon_monitor'; 
[ ETC ETC ] 

这种定义它的方式太重复了。有没有像以下这样更简单的选择?

iconForObjectType = [ 
    ObjectTypes.OBJ_COMPUTER : 'icon_computer', 
    ObjectTypes.OBJ_PRINTER : 'icon_printer', 
    [ETC] 
]; 

谢谢!

回答

0

如果你在文字使用键值对,那么你想要的花括号:

iconForObjectType = { 
    [ObjectTypes.OBJ_COMPUTER] : 'icon_computer', 
    [ObjectTypes.OBJ_PRINTER] : 'icon_printer', 
    // ... 
}; 

毕竟,它只是用数字键的对象。

编辑:

其实这些都是计算性能,所以你需要周围的属性键名方括号。

+0

嗨!我之前尝试过,但是我得到了这个错误:'Type'{ObjectTypes:any:'icon_computer':any:'icon_printer':any}'不可分配为键入'{[type:number]:string}''。 对象字面量可能只指定已知属性,而类型'{[type:number]:string}''中不存在'ObjectTypes'。我认为问题是使用枚举'ObjectTypes',如果我改变它的数字,它工作正常。但我需要枚举,因为它有很多地方参考的全局参数,所以我认为我会让它是... – Fel

+0

我更新了答案,以表明您正在使用计算属性。但是ObjectTypes的定义是什么?如果您需要帮助,您需要提供[完整](https://stackoverflow.com/help/mcve)示例。可能有一种方法可以将枚举键向下转换为数字,并且可以为您工作。 – jcalz

+0

对不起,在这里你有对象类型枚举: '出口枚举对象类型{ OBJ_COMPUTER = 21, OBJ_PRINTER = 22, OBJ_SCANNER = 23, //地段更 OBJ_ANY = -9999 }' 我声明它在我导入所有应用程序组件的全局选项服务中。正如你所看到的,在内部它只是一个数字列表... – Fel