Cast int to enum strings in Typescript
Solution 1
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
Solution 2
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
I think with
{{message.type}}
you just get the mapped value and not the enum. Please try following code.
{{TYPE[message.type]}}
Comments
-
Franz Peter Tebartz van Elst almost 2 years
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
-
Franz Peter Tebartz van Elst about 7 yearsHow can I do that? I'm mapping like this right now:
(response => response.json() as Message[]
-
James Monger about 7 yearsImport
Type
into your file, and rather than doingmessage.type
to get the value, doType[message.type]
. You do this where you want the string value -
Admin about 7 yearsUnfortunately,
Type
will not be available inside a template, unless you add it as a property to the component class aspublic Type = Type;
. -
Vodenjak over 6 yearsCan anyone tell me why if i do Type[message.type] in my case, in debugger I see an error because Type is undefined (it's imported properly to this .ts file)?
-
gajo357 almost 4 yearsHow to check if a number is part of the enum, f.x. check for number 3000 before returning Type[3000]?
-
Teddy Sterne almost 4 years@gajo357 You can use the
in
operator to test if 3000, or any value/key exists in the enum. Exampleconst has3000 = 3000 in Type