无法将JavaScript注入模式转换为TypeScript

时间:2016-10-26 03:02:53

标签: javascript typescript

我们在一个相当大的vanilla JavaScript应用程序中使用定制的注入模式(更多的是一个包含许多消费者的框架)。该模式允许我们明确每个JS模块所依赖的依赖关系。这有两个主要原因:在单元测试模块时很容易存在依赖关系,它允许我们的消费者在运行时动态替换模块实现。

我们已经开始将所有模块迁移到TypeScript,但是在转换暴露自定义类型的几个模块时遇到了麻烦。问题是TypeScript似乎希望立即导出自定义类型,但实际上我们想通过函数调用(我们的依赖注入模式)提供运行时依赖项后导出类型。

所以问题是我们如何在不影响模式本身的情况下将以下注入模式转换为TypeScript?

UPDATE identity.profile op
SET url = 'htpp:sam'
FROM identity.legal_entity le
   WHERE le.legal_entity_id = op.legal_entity_id     
     AND le.global_id = '8wyvr9wkd7kpg1n0q4klhkc4g';

我们返回自定义类型,然后可以在需要时将其新建。例如,我们可以在main.js中编写上述高度设计的模块,如下所示:

module.exports = function ContextModule(logger)  {
  var log = logger.register('context');

  function Context() {
    log('creating type');
  }

  Context.prototype = {
    doSomething: function() {
      log('doing something');
    }
  }

  Context.doSomethingStatic = function() {
    log('doing something static');
  }

  return Context;
};

请注意以下事项:

  • 将记录器模块注入上下文模块
  • 然后直接在ContextModule函数中或在它定义的“类”实现中使用logger模块方法
  • 我们使用CommonJs来“模拟”模块文件并使用browserify来组合它们

1 个答案:

答案 0 :(得分:0)

  

所以问题是如何在不损害模式本身的情况下将以下注入模式转换为TypeScript

你绝对可以使用它(JavaScript是有效的TypeScript)。如果你想要安全,那么将注入框架转换为TypeScript习惯用法的过程将比仅仅使用为其设计的过程更难。

我强烈推荐https://github.com/inversify/InversifyJS