打字稿中的闭包(依赖注入)

时间:2012-11-09 18:59:00

标签: javascript dependency-injection functional-programming typescript

我试图在具有依赖性的功能样式中使用TypeScript。假设我想创建一个依赖于另一个模块的模块。

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

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

这是我使用依赖注入

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

  return {doSomething: doSomething};
}

在typescript中,如果定义一个具体的类或模块,只需在导出它们时键入这些函数或将它们包含在类中。它可以紧挨着彼此。

但是因为我无法在DI函数中定义里面的模块,所以我能看到的唯一方法就是为我单独返回的对象定义一个接口,很烦人,因为我希望类型注释符合定义。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我最终在我的项目上放弃了AMD,因为我也在使用AngularJS并且他们互相踩着对方的脚趾。我确实继续使用相同的DI模式,所以它最终看起来像这样。

我很高兴。我尝试使用类代替(如果保持模块无状态并且构造函数是注入器函数,则可以非常接近),但我不喜欢对所有依赖项使用this

另外,类实际上并没有给我任何东西,因为如果我编写接口,我必须两次定义类型。

interface IMyService {
  doSomething();
}

module.exports = function(SomeOtherModule) {

  return {doSomething: doSomething}

  function doSomething() {
    SomeOtherModule.blah()
  }
}