使用typescript 1.6和es6语法内联使用import

时间:2015-10-14 11:24:16

标签: javascript requirejs typescript ecmascript-6 typescript1.6

我正在考虑使用ES6约定更新一些旧的js libs,但是我遇到了一个绊脚石。

所以历史上,当我动态加载JSON文件时,我会做这样的事情:

this.someFunctionWhichDoesStuff = function() {
   var config = require(theConfigDir); // theConfigDir was a variable
   // ... other stuffs
}

这很好用,在某些情况下我也会动态地包含文件夹中的一些模块:

this.someFunctionWhichDoesStuff = function() {
   var actualImplementationToUse = require(theDirectoryWithImplementation); // theConfigDir was a variable
   // ... other stuffs
}

这允许我根据早期点的配置切换实现,并且运行良好。这里需要注意的要点是模块的解析器是变量而不是静态文本,并且它们是在不在根级别的函数内部运行。

因此,考虑到这一点,我转到TS中的es6样式模块包含,并意识到我不能执行上述操作,因为这不是有效的语法:

public someFunctionWhichDoesStuff() {
       import actualImplementationToUse from theDirectoryWithImplementation;
       // ... other stuffs
    }

这是有道理的,因为我知道ES6模块需要静态解析模块,所以我很酷,但在typescript 1.6世界中,我不确定如何解决这个问题,因为var includedModule = require(theDirectory);似乎无效它不知道require,它可以通过包含节点js d.ts文件来解决,但是我希望有人可以指导一下在新的es6世界中期望的方法是什么?

1 个答案:

答案 0 :(得分:0)

  

确定我知道我可以做到这一点,但有更多的es6方法吗?即如果我使用require,我会被锁定使用所有消费者的需求(无论是浏览器还是节点),我想没有,但我只是想在我走这条路线之前检查一下。

ES6规范无论如何都没有指定模块加载器(SystemJS只是一个示例非标准实现),而且大多数情况下你想要转换为es5。因此,使用require并不是一个坏主意(特别是对于非.ts / .js个文件)