Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用字符串从Typescript枚举获取值_Typescript - Fatal编程技术网

使用字符串从Typescript枚举获取值

使用字符串从Typescript枚举获取值,typescript,Typescript,我正在尝试从此枚举中获取值: enum Sizes { Tiny = "Tiny", VerySmall = "Very Small", Small = "Small", Medium = "Medium", Large = "Large", VeryLarge = "Very Large" } 使用其他StackOverflows中建议的以下代码,我得到以下输出: var text="" for (var size in Sizes) { text = tex

我正在尝试从此枚举中获取值:

enum Sizes {
  Tiny = "Tiny",
  VerySmall = "Very Small",
  Small = "Small",
  Medium = "Medium",
  Large = "Large",
  VeryLarge = "Very Large"
}
使用其他StackOverflows中建议的以下代码,我得到以下输出:

var text=""
for (var size in Sizes) {
    text = text + "\n" + size;
}

console.log(text);

我不想看到VerySmall和VeryLarge的条目,为什么会出现这些条目,我如何才能得到我想要的结果


谢谢

似乎使用的typescript编译器是2.4之前的版本,他们在枚举中添加了字符串值支持。通常有一个从值到枚举的反向映射,值通常是数字。但是,如果您尝试使用2.4之前的字符串,编译器将不知道如何处理它(实际上会产生错误),但仍将生成源代码

比较2.4:

var Sizes;
(function (Sizes) {
    Sizes["Tiny"] = "Tiny";
    Sizes["VerySmall"] = "Very Small";
    Sizes["Small"] = "Small";
    Sizes["Medium"] = "Medium";
    Sizes["Large"] = "Large";
    Sizes["VeryLarge"] = "Very Large";
})(Sizes || (Sizes = {}));
至2.3:

var Sizes;
(function (Sizes) {
    Sizes[Sizes["Tiny"] = "Tiny"] = "Tiny";
    Sizes[Sizes["VerySmall"] = "Very Small"] = "VerySmall";
    Sizes[Sizes["Small"] = "Small"] = "Small";
    Sizes[Sizes["Medium"] = "Medium"] = "Medium";
    Sizes[Sizes["Large"] = "Large"] = "Large";
    Sizes[Sizes["VeryLarge"] = "Very Large"] = "VeryLarge";
})(Sizes || (Sizes = {}));
和2.3不带字符串值:

var Sizes;
(function (Sizes) {
    Sizes[Sizes["Tiny"] = 0] = "Tiny";
    Sizes[Sizes["VerySmall"] = 1] = "VerySmall";
    Sizes[Sizes["Small"] = 2] = "Small";
    Sizes[Sizes["Medium"] = 3] = "Medium";
    Sizes[Sizes["Large"] = 4] = "Large";
    Sizes[Sizes["VeryLarge"] = 5] = "VeryLarge";
})(Sizes || (Sizes = {}));
如果要在2.4及更高版本中强制进行反向映射,可以将值断言为
any

enum Sizes {
  Tiny = <any>"Tiny",
  VerySmall = <any>"Very Small",
  Small = <any>"Small",
  Medium = <any>"Medium",
  Large = <any>"Large",
  VeryLarge = <any>"Very Large"
}
枚举大小{
Tiny=“Tiny”,
VerySmall=“非常小”,
Small=“Small”,
Medium=“Medium”,
Large=“Large”,
VeryLarge=“非常大”
}
只需称之为功能。

在TypeScrit中


enum Sizes {
  Tiny = "Tiny",
  VerySmall = "Very Small",
  Small = "Small",
  Medium = "Medium",
  Large = "Large",
  VeryLarge = "Very Large"
}
class Test {
  constructor() {
    let text = '';

    for (const key in Sizes) {
      if (Sizes.hasOwnProperty(key)) {
        text += Sizes[key] + '<br/>';
      }
    }
    console.log(text);

    text = '';
    Object.keys(Sizes).map(key => text += Sizes[key] + '<br/>');
    console.log(text);
  }
}
let t = new Test();

如果在for-In之后将
size[size]
记录到控制台,您将想象发生了什么,并获得了值。

您可以使用
Object.keys
获取枚举键并记录值,如下所示:

enum Sizes {
  Tiny = "Tiny",
  VerySmall = "Very Small",
  Small = "Small",
  Medium = "Medium",
  Large = "Large",
  VeryLarge = "Very Large"
}

for (const size of Object.keys(Sizes)) {
    console.log(Sizes[size]);
}
输出:

Tiny
Very Small
Small
Medium
Large
Very Large
传输示例:

var大小;
(功能(尺寸){
尺寸[“微小”]=“微小”;
大小[“VerySmall”]=“非常小”;
大小[“小”]=“小”;
大小[“中等”]=“中等”;
大小[“大”]=“大”;
尺寸[“VeryLarge”]=“非常大”;
})(大小| |(大小={}));
对于(var _i=0,_a=Object.keys(size);_i<_a.length;_i++){
变量大小=_a[_i];
console.log(大小[大小]);

}
for循环将只打印键,若要获取值,请使用大小[size]。此外,您发布的输出不正确,它不能用您的逻辑同时打印键和值。@Deshak9这里有个小问题:它实际上似乎是一个TypeScript错误。即使是Microsoft文档中推荐的方法也会导致相同的结果。您也可以查看源代码,查看它如何发出枚举。vs在下面的示例中,这并没有像预期的那样起作用:否,强制它们为
any
将导致在当前版本中发生这种情况。要修复此问题,您需要强制使用特定版本的typescript(这似乎不可能)。JSFIDLE使用版本typescript 1.7.3,它不支持枚举的字符串值,查找
ts.version
。在这里试用我测试了它,它可以工作,但是删除了“class”之前的“export”
enum Sizes {
  Tiny = "Tiny",
  VerySmall = "Very Small",
  Small = "Small",
  Medium = "Medium",
  Large = "Large",
  VeryLarge = "Very Large"
}

for (const size of Object.keys(Sizes)) {
    console.log(Sizes[size]);
}
Tiny
Very Small
Small
Medium
Large
Very Large