TypeScript 透過使用者定義的型別守衛檢查實例類別
好吧,我已經實現了 isInstanceOfClass 函數,它可以判斷該實例是否為給定類的實例,現在我需要為它編寫正確的類型定義。
class Parent {
isInstanceOfClass<T>(arg: T): this is T {
// already implemented
}
}
class FooClass extends Parent {
foo: number;
}
class BarClass extends Parent {
bar: number;
}
範例:
let foo: Parent;
if(foo.isInstanceOfClass(FooClass)) {
foo.foo = 1; // TS2339: Property 'foo' does not exist on type 'Parent & typeof FooClass'.
}
有人可以幫我解決這個錯誤嗎?
由於各種原因,我只能更改 isInstanceOfClass 方法的簽名,而不能更改範例代碼。
答案#1
你快到了!
應該是:
class Parent {
isInstanceOfClass<T>(arg: { new(): T }): this is T {
// already implemented
}
}
差別在於你傳遞給 isInstanceOfClass 的不是實例,而是類別。
一旦你將其改為類別(建構函數),錯誤就會消失。
