提取Typescript对象中枚举的字符串值

提取Typescript对象中枚举的字符串值,typescript,enums,Typescript,Enums,我有一个枚举: export enum DistanceMeasure { Miles, Kilometers } 要在用户对象中使用,请执行以下操作: export class User { ... some stuff MaxTravelDistance: number; DistanceMeasure: DistanceMeasure; MaxTravelTime: TimeSpan; ... some more stuff } 因此,对于距离度量,来自服务器的信息是

我有一个枚举:

export enum DistanceMeasure {
Miles, Kilometers
}

要在用户对象中使用,请执行以下操作:

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

因此,对于距离度量,来自服务器的信息是0(零)或1,这很好。 但我需要呈现字符串,例如“Miles”

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

      console.log(user.DistanceMeasure);
是“0”(零)。 但是我读到,要提取枚举字符串,应该将其用作索引。 如果我这样做:

它返回为未定义

为什么呢?因为user.DistanceMeasure的类型是DistanceMeasure? 它不再是枚举了吗?
谢谢。

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

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

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

应该是
DistanceMeasure[user.DistanceMeasure]
,如下代码片段所示:

enum DistanceMeasure {
    Miles, Kilometers
}

class User {
    DistanceMeasure: DistanceMeasure;
}

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

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

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

请查看


我建议您仔细研究一下,以便了解它们是如何工作的

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

enum DistanceMeasure {
    Miles = 'MILES',
    Kilometers = 'KILOMETERS'
}

常量枚举只能使用常量枚举表达式,与常规枚举不同,它们在编译过程中被完全删除。常量枚举成员在使用站点处内联。这是可能的,因为常量枚举不能有计算成员

因此,您可以从
enum
创建一个新变量
distanceMeasure
将其用作数组:

export enum DistanceMeasure {
  Miles, Kilometers
}

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

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

阅读有关类型脚本枚举的更多信息,请访问:

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

在你的html中,像这样使用它

{{ user.DistanceMeasure | unit }}


变量名应该以小写字母开头<代码>距离度量[0]应输出
英里数
<代码>用户。距离度量值既不是数组,也不是对象。它是
用户
类的属性,其值可以是
距离度量
枚举中定义的值。他需要这些数值。他只需要显示关键的标题,我自己不久就得出了这个结论,但是我的问题的编辑似乎已经丢失了。试图保持与服务器上使用的名称相同。谢谢你的帮助。
export enum DistanceMeasure {
  Miles, Kilometers
}

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

console.log(distanceMeasure[0]); // --> Miles
@Pipe({
  name: 'unit'
})
export class UnitPipe implements PipeTransform {

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

}
{{ user.DistanceMeasure | unit }}