2017-08-24 184 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游乐场没有一个错误。