我想知道如何迭代TypeScript枚举和每个枚举的符号名称.
例如,
enum myEnum { entry1, entry2 }
for (var entry in myEnum) {
// use entry's name here, e.g., "entry1"
}
Run Code Online (Sandbox Code Playgroud) 我刚刚注意到在尝试使用TypeScript创建接口时,"type"是关键字或保留字.例如,在创建以下界面时,使用TypeScript 1.4在Visual Studio 2013中以"蓝色"显示"type":
interface IExampleInterface {
type: string;
}
Run Code Online (Sandbox Code Playgroud)
假设您尝试在类中实现接口,如下所示:
class ExampleClass implements IExampleInterface {
public type: string;
constructor() {
this.type = "Example";
}
}
Run Code Online (Sandbox Code Playgroud)
在类的第一行,当您键入(抱歉)单词"type"以实现接口所需的属性时,IntelliSense会显示"type",其图标与"typeof"或"new"等其他关键字相同".
我已经浏览了一下,并且可以找到这个GitHub问题,它在TypeScript中将"type"列为"严格模式保留字",但我还没有找到任何关于其目的实际是什么的进一步信息.
我怀疑我有一个大脑放屁,这是我应该已经知道的明显的东西,但是TypeScript中的"类型"保留字是什么?
我如何映射打字稿枚举?例如,使用字符串可以执行以下操作:
let arr = [ 'Hello', 'Goodbye' ];
arr.map(v => {
if (v === 'Hello') {
return ':)';
} else if (v === 'Goodbye') {
return ':(';
}
); // [ ':)', ':(' ]
Run Code Online (Sandbox Code Playgroud)
当然,这不适用于枚举:
enum MyEnum { Hello, Goodbye };
MyEnum.map(v => {
if (v === MyEnum.Hello) {
return ':)';
} else if (v === MyEnum.Goodbye) {
return ':(';
}
}); // does not work
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想以一种通用的方式执行此操作,因此我可以简单地使用任何枚举,并通过map函数将其保留,同时保留类型信息.用法可能如下所示:
map(MyEnum, v => {
if (v === MyEnum.Hello) {
return ':)'; …Run Code Online (Sandbox Code Playgroud) 在反应中,我可以将变量限制为值的子集.喜欢
PropTypes.oneOf(['Home', 'About']),
Run Code Online (Sandbox Code Playgroud)
我怎么做打字稿.
.
PS:我没有使用打字稿做出反应.
使用枚举与类型别名有何优缺点,如下所示?
const enum LanguageEnum {
English,
Spanish
}
type LanguageAlias = "English" | "Spanish";
let l: LanguageAlias = "English";
let la: LanguageEnum = Language.English
Run Code Online (Sandbox Code Playgroud)
使用枚举的目的是枚举类型的可能值。但是字符串文字的并集不是也枚举了可能的类型吗?
我一直觉得这些 TS 枚举很奇怪。
我有一个将 HTTP 状态映射到其代码的枚举,如下所示:
我可以通过访问它们的键轻松获取这些代码(注意 IntelliSenseHttpStatus.NOT_FOUND = 404在右侧面板上的显示方式)
现在假设我有一个名为 sendStatus 的函数:
使用keyof typeof不起作用,因为它不会自动完成枚举值。