2017-03-12 9 views
0

拡張しますExtendedClassを引数として別の関数(ではなくのインスタンス、ExtendedClassではなくクラスそのもの)に渡し、ExtendedClassBaseClassになるようにチェックしてください。型チェッククラス(クラスのインスタンスではなく)は、以下のクラスを考えると別のクラス

これは動作しません:c: BaseClasscBaseClassBaseClassを拡張するか何か)のインスタンスなければならないことを意味し

function helloClass (c: BaseClass) {} 

ので - BaseClass自体を拡張ではなくクラス。

これはすべてTypeScript内で可能ですか?

答えて

2

このようなクラスは、{ new(): BaseClass }のように表すことができます。

かの例では:

interface BaseClassConstructor<T extends BaseClass> { 
    new(): T; 
} 

class BaseClass { 
    str: string; 
} 

class ExtendedClass extends BaseClass { } 

function fn<T extends BaseClass>(ctor: BaseClassConstructor<T>) { 

} 

fn(BaseClass); // fine 
fn(ExtendedClass); // fine 

class A { 
    prop: any; 
} 

fn(A); // error 

code in playground

+0

が、これは非常にうまく機能、ありがとうございます。 –

関連する問題