Man*_*zas 41 enums switch-statement typescript
我有以下枚举
enum EditMode {
View = 0,
Edit = 1,
Delete = 2
}
Run Code Online (Sandbox Code Playgroud)
假设我有一个枚举类型的变量
var editMode = EditMode.Edit;
Run Code Online (Sandbox Code Playgroud)
为什么以下代码不起作用(直接默认)?
switch (editMode) {
case EditMode.Delete:
...
break;
case EditMode.Edit:
...
break;
default:
...
break;
}
Run Code Online (Sandbox Code Playgroud)
Sha*_*ica 63
我也有这个问题.轻松绕过它:+在开关中的变量之前添加一个符号,即
switch (+editMode) {
case EditMode.Delete:
...
break;
case EditMode.Edit:
...
break;
default:
...
break;
}
Run Code Online (Sandbox Code Playgroud)
Man*_*zas 17
我找到了为什么我确实发生了.代码中的某个地方有一个激活函数(我正在使用durandal),它将此枚举作为一个字符串传递(该函数的参数标记为枚举但仍然是一个字符串).这就是我的switch语句失败的原因.我只是将值转换为数字,现在一切都按预期工作.不管怎么说,多谢拉
jav*_*301 15
将 EditMode 枚举定义更改为:
enum EditMode {
View = "View",
Edit = "Edit",
Delete = "Delete"
}
Run Code Online (Sandbox Code Playgroud)
aca*_*cat 11
这里的问题与打字稿的(数字)文字类型有关。当你做这个任务时:
var editMode = EditMode.Edit
Run Code Online (Sandbox Code Playgroud)
TypeScript 将类型评估为:
var editMode: 1 = EditMode.Edit
Run Code Online (Sandbox Code Playgroud)
现在,当您将 typescript 知道必须是1( EditMode.Edit) 的值与它知道必须是0( EditMode.View)的值进行比较时,它会将所有这些都视为违反类型安全。如果变量editMode不是 an enum,typescript 只会抱怨,但由于它是 an enum,在 javascript 中并不真正存在,因此 typescript 会以实际上抛出错误的方式控制转译。
所以你有2个选择。因此,您可以强制editMode成为 anumber或成为 an EditMode(即EditMode允许任何值,而不仅仅是分配给editMode变量的值)。
就个人而言,我更愿意将其强制为EditMode,因为它感觉更类型安全。
要走号码路线,您可以执行以下操作,这是前面提到的:
switch(+editMode)
Run Code Online (Sandbox Code Playgroud)
要走这EditMode条路线(我推荐),您可以将其传递给前面提到的函数,但有时不编写函数会更简洁一些。如果是这种情况,那么您可以再次强制switch语句中的类型:
switch(editMode as EditMode)
Run Code Online (Sandbox Code Playgroud)
做你喜欢的任何事情,但我只是喜欢明确地说“这个变量被视为EditMode”而不是“这个变量实际上应该是一个number,而不是一个Enum”。
打字稿版本3.7.5
这段代码对我有用
enum Seasons {
Winter,
Spring,
Summer,
Autum
}
switch (+Seasons.Winter) {
case Seasons.Winter:
console.log('weather is cold');
break;
case Seasons.Spring:
console.log('weather is spring');
break;
case Seasons.Summer:
console.log('weather is summer');
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
或者您可以声明一个常量并用作 switch 语句的参数
const season: Seasons = Seasons.Winter
switch (+season) {
case Seasons.Winter:
console.log('weather is cold');
break;
case Seasons.Spring:
console.log('weather is spring');
break;
case Seasons.Summer:
console.log('weather is summer');
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37436 次 |
| 最近记录: |