我有一个基类和一个派生类。派生类构造函数参数(DerivedOptions
)需要所有BaseOptions
属性和其他属性,因此我将它们表示为接口并对其进行扩展。这是正确的方法吗?我还看到人们使用type
来表示传递给类的选项。有什么方法可以使用它来实现这个功能吗?
interface BaseOptions {
arg1: string;
}
class BaseClass {
constructor(options: BaseOptions) { }
}
interface DerivedOptions extends BaseOptions {
arg2: string;
}
class DerivedOptions extends BaseOptions {
constructor(options: DerivedOptions) {
super();
}
}
答案 0 :(得分:2)
是的,这是一种正确的方法,除了你在调用super时忘记传递选项对象:
class DerivedOptions extends BaseOptions {
constructor(options: DerivedOptions) {
super(options);
}
}
至于使用type alias,它在你的情况下效果不好,因为(如Interfaces vs. Type Aliases中所述):
第二个更重要的区别是类型别名不能 扩展或实施(也不能扩展/实施其他 类型)。因为软件的理想属性是开放的 扩展,你应该总是在类型别名if上使用接口 可能的。
所以这个:
type BaseOptions = {
arg1: string;
}
type DerivedOptions extends BaseOptions = {
arg2: string;
}
不可能,并且不会编译出许多错误。