Gra*_*hau 4 enums types typescript
以下代码给出了错误:
enum E { FIRST = 1, SECOND = 2 };
class C {
value: E;
constructor(arg: C | E) {
if (arg instanceof C) { // 1.
this.value = arg.value;
} else {
this.value = arg; // 2.
}
}
}
var a: C = new C(E.SECOND);
console.log('a.value = ' + a.value);
var b: C = new C(a);
console.log('b.value = ' + b.value);
Run Code Online (Sandbox Code Playgroud)
尽管有错误,但代码似乎可以在TypeScript Playground上正常编译并完成预期的操作.
两个问题.
instanceof当其中一个成分不是对象类型时,编译器中存在一个错误,该错误在联合类型上是不允许的.这是修复的(https://github.com/Microsoft/TypeScript/issues/2775)
另一件事是instanceof不会导致else块中的缩小(https://github.com/Microsoft/TypeScript/issues/1719),因为instanceof检查失败并不一定意味着对象与指定的接口不匹配.这是目前"按设计",但我鼓励你留下评论,你发现这种行为令人惊讶或不受欢迎(我当然这样做).