javascript - 如何将成员的所有函数公开为类自己的函数?

标签 javascript typescript

有很多文章说在大多数情况下组合优于继承(Google:组合 vs 继承)。 我倾向于同意他们给出的论点。

如何将成员的所有函数公开为类自己的函数?

详细问题: 然而,我遇到了一个实用的地方,继承是首选,但由于基类的实现细节,这是不可能的。

假设我有

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 ”成员(member) - 用户应该知道哪些成员在哪里(哪些是本地的,哪些来自“基础”“类”)

限制:

  • 不能从“express”继承,因为它不是一个类。
  • 不能手动重写所有 express 函数(因为 1)它需要大量工作,2)它是带有类型 hell 的 typescript 3)express 会进化并添加东西,...)
  • 它必须是类,我不能只将我的新成员注入(inject)现有的 express 应用程序,因为我的类的生命周期比包含的 express 实例更长,当没有 express 实例存在时,所有调用都应该抛出错误<
  • 我是用 Typescript 写的,所以所有 Expess 函数的类型都应该保留。

最佳答案

在 typescript 中,定义你的类也有express的方法可能会很复杂。如果你想有一个例子,你可以看看我制作的 intl-ts 包,特别是 Intl class ,用自己的方法和用户定义的字典定义。

关于javascript - 如何将成员的所有函数公开为类自己的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52907663/

相关文章:

javascript - 如何避免在 React 上遍历?

Javascript:试图根据下拉值显示不同的形式?

angular - 在 express 和 angular 之间共享接口(interface) interface/model 文件

Angular2 重定向到自定义错误页面

visual-studio - Visual Studio 2017 TypeScript 编译错误

javascript - 环境变量 typescript

javascript - 按元素位置显示大 div 的一小部分

javascript - 如何创建动态表单,其中不属于表/表单的字段会影响选项选择

javascript - 通过js从php页面更改图像的src

angular - Angular5 中的 PubNub 历史