我有这样的枚举:
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')];
从属性到枚举的第一次转换给我一个编译器错误:
无法将'string'转换为'{Step1:Steps;第二步:步骤; [x:number]:字符串; '':Type'String'缺少类型'{Step1:Steps;'的属性'Step1'。第二步:步骤; [x:number]:字符串; }”。
为什么第一种方法不起作用? toString()
为lib.d.ts
中的方法的所有实例返回基本类型的字符串。
答案 0 :(得分:1)
摘要:在toString()
类型的变量上调用any
不会返回字符串。您可以使用<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')];