2017-11-29 18 views
1

これは、インスタンスが指定されたクラスのインスタンスかどうかを知ることができるように、isInstanceOfClass関数を実装しました。TypeScriptのチェックインスタンスクラスは、ユーザー定義の型ガードを介して

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メソッドのシグネチャを変更することはできますが、サンプルコードでは変更できません。

答えて

2

あなたはほぼそこにいます!
それは次のようになります。

class Parent { 
    isInstanceOfClass<T>(arg: { new(): T }): this is T { 
     // already implemented 
    } 
} 

違いは何をisInstanceOfClassに渡していることは、インスタンスが、クラスではないということです。
これをクラス(コンストラクタ)に変更すると、エラーはなくなります。

+0

私はいつも '{new():T}'のことを忘れてしまった! – pravdomil

関連する問題