扩展传递给派生类

时间:2016-12-10 06:38:54

标签: inheritance typescript

我有一个基类和一个派生类。派生类构造函数参数(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();
   }
}

1 个答案:

答案 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;
}

不可能,并且不会编译出许多错误。