从基类调用派生类的新方法 - 在Typescript中是否存在等效的“虚拟类”?

时间:2017-10-08 14:23:31

标签: typescript

我正在寻找一个干净的选项来实现类似于C ++ virtual classes

的功能

简化用例: 我正在开发一种可以连接到多个后端“摄像机录制系统”的移动应用程序。我的应用程序将有多个“视图”,如“事件”,“蒙太奇”等。我不想使用后端特定代码丢弃每个视图。

为实现这一目标,我做了以下工作:

export  class CameraServiceProvider {
  getCameras(credentials?): Promise <Camera[]> {
    throw constants.NOT_IMPLEMENTED;
  }
// ... other methods
}

CameraService Provider是基类。有adapters扩展此类并提供其自己的供应商特定实现。例如:

export class ZmCameraServiceProvider extends CameraServiceProvider {
  getCameras(credentials): Promise <Camera[]> { 
  // specific code for this camera provider backend
   }
}

在我的app.component.ts我这样做:

@Component({
  templateUrl: 'app.html',
  providers: [
    {provide: CameraServiceProvider, useClass: ZmCameraServiceProvider},

  ]
})

此设置现在允许我在我的主应用中实例化并使用CameraServiceProvider将来,如果我需要更换到管理相机的其他系统,我需要做的就是开发一个新的whateverCameraServiceProvider并修改我的useClass - 其余的应用代码保持不变。

有一个问题:对于我添加到mynewFoo()的每个新方法ZmCameraServiceProvider,我必须在CameraServiceProvider中声明该方法,否则编译器会抱怨mynewFoo()没有不存在。

我想有一种方法可以想到,如果ZmCameraServiceProvider中存在CameraServiceProvider中不存在的方法,并且我在主应用程序中调用它,那么我正在打破自己的设计后端独立的目标 - 我想这是正确的。我仍然很好奇是否可以实现 - 也就是说,使用基类来调用派生类中的新方法

这就是为什么我在寻找类似于虚拟类的构造。

0 个答案:

没有答案