這是怎麼回事
問題是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