提取打字稿对象中ENUM的字符串值

时间:2019-05-28 09:39:15

标签: typescript enums

我有一个枚举:

export enum DistanceMeasure {
Miles, Kilometers

}

要在用户对象中使用:

export class User {
... some stuff
MaxTravelDistance:  number;
DistanceMeasure:    DistanceMeasure;
MaxTravelTime:      TimeSpan;
... some more stuff

}

因此,来自服务器的信息以0(零)或1(距离测量)的形式来自服务器,这很好。 但是我需要显示字符串例​​如“英里”。

在我的(角度/离子)应用中,

的输出
      console.log(user.DistanceMeasure);

为'0'(零)。 但是我读过要提取枚举字符串,您应该将其用作索引。 如果我这样做:

      console.log(user.DistanceMeasure[0]);

它以未定义的形式返回。

那是为什么?由于user.DistanceMeasure属于DistanceMeasure类型? 不再是枚举了吗? 谢谢。

6 个答案:

答案 0 :(得分:0)

默认情况下,枚举的数值为0,1,2 ... 您可以像这样定义枚举:

export enum DistanceMeasure {
    Miles = 'Miles',
    Kilometers = 'Kilometers'
}

现在DistanceMeasure.Miles的值为“英里”。

答案 1 :(得分:0)

应为DistanceMeasure[user.DistanceMeasure],如以下代码段所示:

enum DistanceMeasure {
    Miles, Kilometers
}

class User {
    DistanceMeasure: DistanceMeasure;
}

const user = new User();
user.DistanceMeasure = 0;

console.log(DistanceMeasure[user.DistanceMeasure]); // Miles

造成混乱的主要原因是您没有遵循命名约定,因此最终获得的属性与枚举名称相同。

答案 2 :(得分:0)

看看Typscript documentation

中的字符串枚举
enum Direction {
    Up = "UP",
    Down = "DOWN",
    Left = "LEFT",
    Right = "RIGHT",
}

我建议研究this,以便您了解它们的工作原理

答案 3 :(得分:0)

如果您未定义自定义值,则enum具有按声明顺序从0开始的整数值。 如果希望它们具有字符串值,则必须像这样声明它们

BSD sed

答案 4 :(得分:0)

const枚举只能使用常量枚举表达式,与常规枚举不同,它们在编译期间会被完全删除。 const枚举成员在使用站点内联。这是可能的,因为const枚举不能具有计算所得的成员。

因此,您可以在enum中创建一个新变量distanceMeasure来像数组一样使用它:

export enum DistanceMeasure {
  Miles, Kilometers
}

const distanceMeasure = [DistanceMeasure.Miles, DistanceMeasure.Kilometers];

console.log(distanceMeasure[0]); // --> Miles

通过以下网址了解有关 TypeScript枚举的更多信息:https://www.typescriptlang.org/docs/handbook/enums.html

答案 5 :(得分:0)

由于您尚未明确定义枚举的值,因此它们的默认值分别为0和1。现在您从服务器获取了0和1,因此可以正确地映射到枚举。您要做的是编写一个管道,将0格式设置为“英里”,将1格式设置为“公里”。

@Pipe({
  name: 'unit'
})
export class UnitPipe implements PipeTransform {

  constructor() {
  }
  transform(value: DistanceMeasure ): any {
    return value === DistanceMeasure.Mile ? 'Mile' : 'Kilometer'
  }

}

然后在您的html中像这样使用它

{{ user.DistanceMeasure | unit }}