这是怎么回事
问题是这instanceof
是JavaScript的构造,在JavaScript中,instanceof
期望右侧操作数的值为。具体来说,在x instanceof Foo
JavaScript中将执行运行时检查,以查看Foo.prototype
的原型链中是否存在x
。
但是,在TypeScript中,interface
s没有发出。这意味着在运行时既不存在Foo
也不Foo.prototype
存在,因此该代码肯定会失败。
TypeScript试图告诉您这永远行不通。Foo
只是一种类型,根本不是值!
“我该怎么办instanceof
呢?”
您可以研究类型保护和用户定义的类型保护。
“但是,如果我只是从interface
a切换到aclass
呢?”
您可能会倾向于从切换interface
到class
,但是您应该意识到,在TypeScript的结构类型系统(事物主要基于形状)中,您可以生成任何形状与给定类相同的对象:
class C {
a: number = 10;
b: boolean = true;
c: string = "hello";
}
let x = new C()
let y = {
a: 10, b: true, c: "hello",
}
x = y;
y = x;
在这种情况下,您拥有x
和y
类型相同的类型,但是,如果您尝试instanceof
在任何一个上使用,您将在另一个上得到相反的结果。所以,instanceof
不会真的能告诉你很多,如果你在服用打字稿结构类型的优势类型。
Foo | string
。