2017-08-24 13 views
0

ここにタイスクリプトの質問があります。Typescript型ガード継承クラス

私は今、私はBaseModelから継承するクラスの引数を受け取る関数を記述するために必要なすべてのBaseModel

class BaseModel { 
    public isChecked: boolean; 
} 

class Animal extends BaseModel { 
    public id: number; 
} 

class Car extends BaseModel { 
    public hasHotWheels: boolean; 
} 

から継承されている多くのモデルクラスを、持っています。私は明示的にすべてのクラスをリストすることができますが、私はBaseModelクラスから継承する50以上のモデルを持っているので、私の質問はどういうわけか、関数のパラメータがそのようなクラスから継承することを期待していると述べることができます

答えて

3

ジェネリックは助けることができます。

function foo<TModel extends BaseModel>(_input: TModel) {} 

ジェネリックを記述する際にクラス・キーワードの多くは、TSのロードマップの詳細オプションを使用して、使用することができます。型推論はこの種のものを簡単に扱うことができ、失敗した場合はfoo<FooModel>を明示的に呼び出すことができ、それでも型保証されます。

あなたはこのように、あなたの関数の型として親クラスを使用していないのはなぜ
1

:エラーなしTSプレイグラウンドでテスト

class ChildA extends Parent { 

} 

class ChildB extends Parent { 

} 

function beAwesomeParent(parent: Parent) { 
    parent.isCool = true; 
} 

var childA = new ChildA(); 
beAwesomeParent(childA);