比较可变枚举成员变量时Typescript编译器错误
我得到一个错误:比较可变枚举成员变量时Typescript编译器错误,typescript,enums,Typescript,Enums,我得到一个错误: TS2365: Operator '===' cannot be applied to types 'ExampleState.Unsaved' and 'ExampleState.Saving'. 将枚举与可变成员变量进行比较时: enum ExampleState { Unset = -1, Unsaved = 0, Saving = 1, Saved = 2 } class Example { private state :
TS2365: Operator '===' cannot be applied to types 'ExampleState.Unsaved' and 'ExampleState.Saving'.
将枚举与可变成员变量进行比较时:
enum ExampleState {
Unset = -1,
Unsaved = 0,
Saving = 1,
Saved = 2
}
class Example {
private state : ExampleState = ExampleState.Unset;
public Save() {
if (this.state === ExampleState.Unsaved) {
this.BeginSaving();
while (this.state === ExampleState.Saving) { // !error!
this.CommitSave();
}
}
}
private BeginSaving() {
this.state = ExampleState.Saving;
}
private CommitSave() {
this.state = ExampleState.Saved;
}
}
真正的例子是一个异步方法,它多次尝试保存-
这已被简化为仅说明错误
Typescript似乎不理解这个变量是可变的,并且假设它没有被更改,就过于激进了。为什么会发生这种情况?解决方法是什么?这是一个问题
因为您可以为state属性创建包装器方法。(谢谢@Paleol)
访问
您可以使用
while(this.state as any===ExampleState.Saving)
作为解决方法。但是我建议你这样做。同样的建议,尽管我更愿意:while(this.state作为ExampleState===ExampleState.Saving)
关于这一点有一个开放的问题:在@Magu发布的问题中,有一个。我认为这是最好的解决办法。
enum ExampleState {
Unset = -1,
Unsaved = 0,
Saving = 1,
Saved = 2
}
class Example {
private state : ExampleState = ExampleState.Unset;
private State() {
return this.state;
}
public Save() {
if (this.State() === ExampleState.Unsaved) {
this.BeginSaving();
while (this.State() === ExampleState.Saving) {
this.CommitSave();
}
}
}
private BeginSaving() {
this.state = ExampleState.Saving;
}
private CommitSave() {
this.state = ExampleState.Saved;
}
}