在 TypeScript 中从 DOM 属性转换为枚举
Converting from DOM property to enum in TypeScript
我有一个这样的枚举:
enum Steps {
Step1,
Step2,
...
}
我尝试以几种不同的方式使用它:
var cur_step : Steps = Steps[$(this).prop('data-step').toString()]; // compiler error
var str : string = $(this).prop('data-step').toString(); // no error
var cur_step : Steps = Steps[$(this).attr('data-step')];
var cur_step : Steps = Steps[String($(this).prop('data-step'))];
var cur_step : Steps = Steps[<string>$(this).prop('data-step')];
从属性到枚举的第一次转换给了我一个编译器错误:
无法将"字符串"转换为"{ 步骤1:步骤;步骤2:步骤;[x:数字]:字符串;}':类型"字符串"缺少类型"{ 步骤1:步骤"中的属性"步骤1";步骤2:步骤;[x:数字]:字符串;}'.
为什么第一种方法不起作用? toString()
返回 lib.d.ts
中该方法的所有实例的基类型字符串。
摘要:对 any
类型的变量调用 toString()
不会返回字符串。您可以改用 <string>
进行强制转换。完整详情如下。
从字符串到枚举的转换正如您所描述的那样 - 这是一个绝对有效的例子......
enum Steps {
Step1,
Step2,
Step3
}
var propValue = 'Step3';
var currentStep: Steps = Steps[propValue];
看到这个运行
编译器允许在any
类型上调用任何属性或函数(prop 返回any
在您的情况下),并且不会推断结果。因此,在这种情况下toString()
不假定是返回字符串的真实版本。下面是使用代码的示例:
var x = $(this).prop('data-step').toString(); // x is any
并举一个简短的例子来证明这一点:
var d: any;
d = 'test';
var e = d.toString(); // e is any
因此,要在一行中通过您的示例解决此问题,您可以使用:
var currentStep: Steps = Steps[<string>$(this).prop('data-step')];
相关文章:
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- 枚举附加到文档的HTML对象的所有事件
- JavaScript数组的子类化破坏了快速枚举
- 为什么Javascript程序员更喜欢在代码中重复字符串作为常量,而不是使用枚举类型的对象
- 不可枚举的属性出现在 for..在 Chrome 中循环
- json模式v4如何根据枚举实现枚举
- 如何访问从 jstl foreach 到 jQuery 的枚举值
- 如何从 Javascript 访问 Java 枚举 (Java 1.8)
- JSON.stringify未序列化可枚举属性
- 为什么ES6 WeakMap's不可枚举
- 如何在另一个对象中枚举一个对象
- Javascript propertyIsNumerable-是否有可枚举的方法
- Javascript不可枚举属性
- TypeScript 中的枚举:JavaScript 代码在做什么
- 使用枚举作为类型/接口
- sails.js:枚举的模型定义 - 动态值列表
- 如何更改 Javascript 对象属性的可写可枚举和可配置值
- 如何将中继变量设置为枚举值
- JavaScript for.in 和枚举奇怪的行为
- 在 TypeScript 中从 DOM 属性转换为枚举