Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inheritance 扩展传递给派生类的选项的Typescript最佳实践_Inheritance_Typescript - Fatal编程技术网

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;
}
这是不可能的,并且不会编译,但会出现许多错误