web-dev-qa-db-ja.com

Typescriptでintをキャストして文字列を列挙する

RESTfulサービスから次のデータを取得します。

[
  {
    "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の 'type'にアクセスすると、int値しか取得できません。しかし、文字列値を取得したいです。

例えば:

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

TypeScriptの列挙型は実行時の数値なので、message.type012、または3になります。

文字列値を取得するには、その番号をインデックスとして列挙に渡す必要があります。

Type[0] // "Info"

したがって、あなたの例では、これを行う必要があります:

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

ドキュメント

40
James Monger

TypeScriptの列挙型は、すべての可能な値に対してint -> stringおよびstring -> intからのプロパティを持つ実行時のオブジェクトです。

文字列値にアクセスするには、以下を呼び出す必要があります。

Type[0] // "Info"

チェーンされた呼び出しは次の結果になる可能性があるため、正しいタイプをプロパティアクセサーに渡していることを確認してください。

Type[Type.Info] // "Info"
Type[Type[Type.Info]] // 0
Type["Info"] // 0
Type[0] // "Info"
31
Teddy Sterne

と思う

{{message.type}}

列挙型ではなく、マップされた値を取得するだけです。次のコードを試してください。

{{TYPE[message.type]}}
1
C.Stebner