提取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 }}