javascript - Konvertera int till enum-strängar i Typescript


Jag får följande data från en RESTful-tjänst:

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

Och jag kartlägger med den här klassen:

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


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

Men när jag får tillgång till 'type' i Angular2 får jag bara ett heltalsvärde. Men jag skulle vilja få ett strängvärde.

t.ex:

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

Svar #1

Enums i TypeScript är nummer vid körning, så message.type kommer att vara 0, 1, 2 eller 3.

För att få strängvärdet behöver du skicka det numret till enum som ett index:

Type[0] // "Info"

Så, i ditt exempel, kommer du att behöva göra detta:

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

Dokument

Svar #2

Enums i TypeScript är objekt vid körning som har egenskaper som går från int -> string och från string -> int för alla möjliga värden.

För att komma åt strängvärdet behöver du anropa:

Type[0] // "Info"

Se till att du skickar rätt typ till egenskapsåtkomstmetoden, eftersom kedjade anrop kan resultera i följande:

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

Relaterade artiklar