2017-02-17 130 views
8

串我從一個RESTful服務得到以下數據:演員INT以枚舉在打字稿

[ 
    { 
    "id": 42, 
    "type": 0, 
    "name": "Piety was here", 
    "description": "Bacon is tasty, tofu not, ain't nobody like me, cause i'm hot...", 
    }... 

而且我這個類的映射:

export enum Type { 
    Info, 
    Warning, 
    Error, 
    Fatal, 
} 


export class Message{ 
    public id: number; 
    public type: Type: 
    public name: string; 
    public description: string; 
} 

但是,當我訪問「類型」在Angular2中,我只獲得一個int值。但我想獲得一個字符串值。

e.g:

'message.type=0' 
{{message.type}} => should be Info 
'message.type=1' 
{{message.type}} => should be Warning 
+0

這是編譯時問題還是運行時問題? –

+0

它編譯並運行良好。對於'{{message.type}]'我得到'0',但我想要'Info'。 –

回答

10

枚舉在打字稿是在運行時的數字,所以message.type0123

要獲取字符串值,則需要這個數字傳遞到枚舉作爲索引:

Type[0] // "Info" 

所以,在你的榜樣,你需要這樣做:

Type[message.type] // "Info" when message.type is 0 

Docs

+0

我該怎麼做?我正在像這樣映射: '(response => response.json()as Message []' –

+0

將'Type'導入到您的文件中,而不是'message.type'來獲取值,鍵入[message.type]'。你想要的字符串值是 –

+4

。不幸的是,'Type'在模板中不可用,除非你將它作爲屬性添加到組件類中作爲'public Type = Type;' 。 – 2017-02-17 13:52:08

8

TypeScript中的枚舉是運行時的對象,其對於所有可能的值具有從int -> stringstring -> int開始的屬性。

要訪問您將需要調用字符串值:

Type[0] // "Info" 

確保您傳遞正確的類型爲屬性訪問器,但因爲鏈式調用會導致以下:

Type[Type.Info] // "Info" 
Type[Type[Type.Info]] // 0 
Type["Info"] // 0 
Type[0] // "Info" 
0

我覺得跟

{{message.type}} 

你剛纔得到的映射值,而不是枚舉。 請嘗試下面的代碼。

{{TYPE[message.type]}} 
+0

不幸的是,這段代碼沒有解決。 –