Typescript继承了类作为函数参数

时间:2017-08-24 13:12:51

标签: angular typescript

我这里有一个打字稿问题。

我有很多模型类,都是从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 ) {} 

2 个答案:

答案 0 :(得分:4)

泛型可以提供帮助:

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

在描述泛型时可以使用许多类关键字,在TS路线图上有更多选项。类型推断可以轻松处理这类事情,当它失败时,您可以明确地调用foo<FooModel>,它仍然是类型安全的。

答案 1 :(得分:1)

为什么不直接使用Parent类作为函数的类型,如下所示:

class ChildA extends Parent {

}

class ChildB extends Parent {

}

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

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

在没有错误的情况下在TS Playground上测试。