这是怎么回事
问题是instanceof
是从JavaScript构建,并在JavaScript中,instanceof
预计,右侧操作数值。 具体而言,在x instanceof Foo
的JavaScript将执行运行时检查以看是否Foo.prototype
在x
原型链的任何地方存在。
但是,在TypeScript中,interface
s没有发射。 这意味着,Foo.prototype
在运行时不存在,因此,这段代码肯定会失败。
TypeScript正试图给你一个警告:Foo
只是一种类型;这根本不是一个价值!
“我能做什么而不是instanceof
?”
你可以看看type guards and user-defined type guards。
“但是如果我刚从interface
切换到class
?
你也许会从interface
切换到class
,但你应该认识到,在打字稿的结构类型系统(那里的东西主要是形状基于),你就可以生产任何有形状相同的对象给定类:
class C {
a: number = 10;
b: boolean = true;
c: string = "hello";
}
let x = new C()
let y = {
a: 10, b: true, c: "hello",
}
// Works!
x = y;
y = x;
在这种情况下,你有x
和y
具有相同的类型,但如果你试图在任何一个使用instanceof
,你会得到另一个相反的结果。 因此instanceof
不会真的如果您正在利用TypeScript中的结构类型,可以告诉您有关该类型的更多信息。
见下面@ 4castle答案。否则,你是对的,我会做成'Foo | string'。 –
[使用Typescript检查接口类型]的可能重复(https://stackoverflow.com/questions/14425568/interface-type-check-with-typescript) – Cerbrus
[可能重复[检查变量是否是特定接口类型打字稿工会(https://stackoverflow.com/questions/29172486/check-if-variable-is-a-specific-interface-type-in-a-typescript-union)(我真的不希望单幅自己动手锤) – Cerbrus