2017-10-06 28 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