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 = text + "\n" + size;
}
console.log(text);
Tiny
VerySmall
Very Small
Small
Medium
Large
VeryLarge
Very Large
我不想要条目 VerySmall 和 VeryLarge,为什么会出现这些条目,如何获得我想要的结果?
谢谢!
解决方案
使用的打字稿编译器似乎是 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"
}
只需称其为功能。
推荐阅读
- sql-server - 在 sp_configure 中找不到“锁”-SQL Server 2016
- python-3.x - 将信息附加到 Jira Python 中的现有描述
- python - 如何为最长的渐进序列编码
- firebase - 如何加入两个 Vuefire 集合?
- css - 防止复选框标签切换复选框
- c++ - 是否有 ac/c++ lib 提供具有类似 stdlib 接口的内存池实现?
- java - 在集会中与所有者一起获取任务详细信息时无法应用发布明智的过滤器
- javascript - 如何以角度关注文本框交叉组件
- angular - 角材料matcard动态内部材料网格
- c++ - 为什么OpenGL给我错误:错误:0:1:'':不支持版本'330'?