2017-08-24 113 views
0

我在這裏有一個打字稿問題。打字稿類型後衛繼承類

我有很多模型類,這都是從BaseModel

class BaseModel { 
    public isChecked: boolean; 
} 

class Animal extends BaseModel { 
    public id: number; 
} 

class Car extends BaseModel { 
    public hasHotWheels: boolean; 
} 

繼承現在我需要編寫一個接受是從BaseModel繼承的類參數的函數。我可以明確地列出所有的類,但是我有超過50個從BaseModel類繼承的模型,所以我的問題是,我可以以某種方式聲明,我期望函數參數從所述類繼承,像這樣

function foo(_input: inherits from BaseModel) {} 

回答

3

泛型可以幫助:描述仿製藥的時候,用的TS路線圖更多的選擇

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

許多類的關鍵字都可以使用。類型推斷可以很容易地處理這類事情,當它失敗時,您可以明確地調用foo<FooModel>,它仍然是類型安全的。

1

你爲什麼不只是使用父類的類型,你的功能,如:

class ChildA extends Parent { 

} 

class ChildB extends Parent { 

} 

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

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

測試的TS遊樂場沒有一個錯誤。