Inheritance 扩展传递给派生类的选项的Typescript最佳实践
我有一个基类和一个派生类。派生类构造函数参数(Inheritance 扩展传递给派生类的选项的Typescript最佳实践,inheritance,typescript,Inheritance,Typescript,我有一个基类和一个派生类。派生类构造函数参数(DerivedOptions)需要所有的BaseOptions属性和其他属性,因此我将它们表示为接口并对其进行了扩展。这样做正确吗?我还看到人们使用type来表示传递给类的选项。有什么方法可以使用它实现此功能吗 interface BaseOptions { arg1: string; } class BaseClass { constructor(options: BaseOptions) { } } interface Derive
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();
}
}
是的,这是一个正确的方法,除了调用super时忘记传递options对象:
class DerivedOptions extends BaseOptions {
constructor(options: DerivedOptions) {
super(options);
}
}
至于使用,它在您的情况下不会很好地工作,因为(如中所述):
第二个更重要的区别是类型别名不能
从扩展或实现(也不能扩展/实现其他
类型)。因为软件的一个理想属性是对用户开放
扩展时,应始终在类型别名上使用接口,如果
可能
因此:
type BaseOptions = {
arg1: string;
}
type DerivedOptions extends BaseOptions = {
arg2: string;
}
这是不可能的,并且不会编译,会有很多错误。是的,这是正确的方法,只是调用super时忘记传递options对象:
class DerivedOptions extends BaseOptions {
constructor(options: DerivedOptions) {
super(options);
}
}
至于使用,它在您的情况下不会很好地工作,因为(如中所述):
第二个更重要的区别是类型别名不能
从扩展或实现(也不能扩展/实现其他
类型)。因为软件的一个理想属性是对用户开放
扩展时,应始终在类型别名上使用接口,如果
可能
因此:
type BaseOptions = {
arg1: string;
}
type DerivedOptions extends BaseOptions = {
arg2: string;
}
这是不可能的,并且不会编译,但会出现许多错误