Cast int to enum strings in Typescript

JavascriptAngularTypescriptEnums

Javascript Problem Overview


I get from a RESTful Service the following data:

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

And I'm mapping with this class:

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


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

But when I access 'type' in Angular2 I get only a int value. But I'd like to get a string value.

e.g:

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

Javascript Solutions


Solution 1 - Javascript

Enums in TypeScript are numbers at runtime, so message.type will be 0, 1, 2 or 3.

To get the string value, you need to pass that number into the enum as an index:

Type[0] // "Info"

So, in your example, you'll need to do this:

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

Docs

Solution 2 - Javascript

Enums in TypeScript are objects at runtime that have properties that go from int -> string and from string -> int for all possible values.

To access the string value you will need to call:

Type[0] // "Info"

Make sure that you are passing the correct type into the property accessor though because chained calls can result in the following:

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

Solution 3 - Javascript

I think with

{{message.type}}

you just get the mapped value and not the enum. Please try following code.

{{TYPE[message.type]}}

Solution 4 - Javascript

This is how enum works in the typescript:

   enum PrintMedia {
      Newspaper = 1,
      Newsletter,
      Magazine,
      Book
    }

  PrintMedia.Magazine;            // returns  3
  PrintMedia["Magazine"];         // returns  3
  PrintMedia[3];                  // returns  Magazine
  PrintMedia[PrintMedia.Magazine];// returns  Magazine

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionFranz Peter Tebartz van ElstView Question on Stackoverflow
Solution 1 - JavascriptJames MongerView Answer on Stackoverflow
Solution 2 - JavascriptTeddy SterneView Answer on Stackoverflow
Solution 3 - JavascriptC.StebnerView Answer on Stackoverflow
Solution 4 - JavascriptVlad HronaView Answer on Stackoverflow