如何在 Typescript 中为多个 classes 实现包装器 class

How to implement a wrapper class for multiple classes in Typescript

我有多个 API 来提供相同的功能,我想将它们包装起来,所以我只需要处理一个 class,以后可以添加更多 API。

我还做了什么:

class FirstAPI: API {}

class SecondAPI: API {}

class GeneralAPI: API {
  public api: API;

  constructor(type: string){
    if(type === 'first') {
      this.api = new FirstAPI();
    }
    if(type === 'second') {
      this.api = new SecondAPI();
    }
  }


  someMethod(){
    this.api.someMethod();
  }

}

如您所见,这样做我不得不不必要地重复我的方法,而且我还必须在常规 class 中手动处理输入和输出类型。

请建议一些 better/elegant 具有适当类型支持的解决方案。

您当前代码的问题是使用 if...else 违反了 OCP(开闭原则)。

这里您真正需要的是工厂模式,您将注册所有可以创建的可用 API。之后,您可以使用密钥相应地创建它们。

例如(仅供参考)

ApiFactory.register('firstApi', FirstAPI);
ApiFactory.register('secondApi' SecondAPI);
const api: API = ApiFactory.get('firstApi');
api.someMethod();

factory-pattern explained

more explanation on factory-pattern