在这种情况下不允许使用instanceof - 为什么?
public assign(color: string | ColorProperty | RgbProperty | RgbColor): void {
super.assign(color);
if (color instanceof ColorProperty) {
ps - 我喜欢工会!!!
答案 0 :(得分:1)
说any
必须出现在工会中是不正确的。这也有效。
class Foo { }
class Bar { }
var x: Foo | Bar = new Foo();
if (x instanceof Foo) {
// this is ok
}
然而,即使没有结合,这也行不通。
var n: number = 123;
if (n instanceof Foo) {
// compile error
}
问题在编译器错误中说明。
'instanceof'表达式的左侧必须是'any'类型,对象类型或类型参数。
因此,当联合包含any
时,您总是被允许将值视为any
,这意味着没有编译时限制。否则,编译器仅允许允许应用于任何单个类型的操作。
答案 1 :(得分:0)
似乎instanceof
关键字必须在联合中包含类型any
才能在函数中使用它。
我的猜测是编译器需要处理所有类型保护返回false的情况 - 因此类型被推断为any
。
function assign(_color: any | string | ColorProperty | RbgProperty) {
if (_color instanceof ColorProperty) {
}
// else may not be a string | ColorProperty | RbgProperty
}