我这里有一个打字稿问题。
我有很多模型类,都是从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 ) {}
答案 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上测试。