【问题标题】:Closures in Typescript (Dependency Injection)Typescript 中的闭包(依赖注入)
【发布时间】:2012-12-08 03:37:45
【问题描述】:

尝试以具有依赖关系的函数式样式使用 TypeScript 时,我感到很沮丧。假设我想制作一个依赖于另一个模块的模块。

如果我不使用依赖注入,它看起来像这样(在节点中)。

SomeOtherModule = require("SomeOtherModule")
exports.doSomething = function() {
  SomeOtherModule.blah()
}

这就是我使用依赖注入的方式

module.exports = function(SomeOtherModule) {
  function doSomething() {
    SomeOtherModule.blah()
  }

  return {doSomething: doSomething};
}

在打字稿中,如果你定义了一个具体的类或模块,你可以在导出函数时键入函数或将它们包含在类中。都在旁边。

但由于我无法在 DI 函数内部定义一个模块,所以我可以看到的唯一方法是为我单独返回的对象定义一个接口,这很烦人,因为我想让类型注释符合定义。

有什么更好的方法来做到这一点?

【问题讨论】:

    标签: javascript dependency-injection functional-programming typescript


    【解决方案1】:

    这可能会给你一个好的开始:http://blorkfish.wordpress.com/2012/10/23/typescript-organizing-your-code-with-amd-modules-and-require-js/

    我不知道这是否是最好的设置方式。但我得到了它的工作。

    【讨论】:

    • 是的,我可以让工作正常进行,只是我对完成后的外观不满意。我现在打算只在顶部指定接口的路线。
    【解决方案2】:

    我最终在我的项目中放弃了 AMD,因为我也在使用 AngularJS,而且他们互相踩到了对方的脚趾。我确实一直使用相同的 DI 模式,所以最终看起来像这样。

    我对此很满意。我尝试使用类来代替(如果您保持模块无状态并将构造函数作为注入器函数,您可以非常接近),但我不喜欢对所有依赖项都使用this

    此外,类实际上并没有给我带来任何好处,因为如果我要编写一个接口,无论如何我都必须定义两次类型。

    interface IMyService {
      doSomething();
    }
    
    module.exports = function(SomeOtherModule) {
    
      return {doSomething: doSomething}
    
      function doSomething() {
        SomeOtherModule.blah()
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-10
      • 2020-02-05
      • 2016-07-19
      • 2015-08-28
      • 2014-12-04
      • 2017-01-15
      • 1970-01-01
      • 2020-02-13
      • 2015-11-05
      相关资源
      最近更新 更多