如何将成员的所有功能公开为类自己的功能?

时间:2018-10-20 16:17:14

标签: javascript typescript

有很多文章说,在大多数情况下,组合比继承要好(Google:组合vs继承)。 而且我倾向于同意他们提出的论点。

如何将成员的所有功能公开为类自己的功能?

详细问题: Hovewer我介绍了一个首选继承的实用程序,但是由于基类的实现细节,因此不可能实现。

假设我有

class class1 {
    constructor(options) {
        this.express = express();
    }

    my_function() {
        // ...
    }
}

let a = new class1();

有没有办法使所有呼叫正常工作?

a.my_function();
a.get(...);
a.post(...);
a.<ANY_OTHER_EXPRESS_STUFF_HERE>(...);

我当前的解决方案

a.my_function();
a.express.get(...);
a.express.post(...);
a.express.<ANY_OTHER_EXPRESS_STUFF_HERE>(...);

有什么不好的地方: - 它很丑 -我总是必须要经过'express'成员 -用户应该知道哪些成员在哪里(哪些是本地成员,哪些来自“基础”“类”)

限制:

  • 不能从'express'继承,因为它不是一个类。
  • 不能手动重写所有express函数(因为1)这需要大量工作,2)它是带有类型地狱的打字稿3)express会发展并添加东西,...)
  • 它必须是类,我不能只是将新成员注入现有的express应用程序中,因为我的类的生命周期比包含的express实例更长,因此当没有Express实例出现时,所有调用都应该引发错误
  • 我使用Typescript编写,因此应保留所有Expess函数的类型。

1 个答案:

答案 0 :(得分:0)

在打字稿中,定义您的类还具有表达方法可能会很复杂。如果要举个例子,可以看看我制作的intl-ts程序包,尤其是Intl class,它使用自己的方法和用户定义的字典进行了定义。