在TypeScript中动态导入模块

时间:2013-08-08 05:01:08

标签: import module typescript

动态加载模块的TypeScript方式是什么(在运行时已知模块的路径)?我试过这个:

var x = "someplace"
import a = module(x)

但似乎TypeScript编译器希望在编译时将路径视为导入/模块中的字符串:

$ tsc test.ts 
/tmp/test.ts(2,19): error TS1003: Identifier expected.
/tmp/test.ts(2,20): error TS1005: ';' expected.

我知道我可以直接使用RequireJS(如果我使用amd模块格式),但这对我来说感觉不对 - 它是一个特定库的解决方案。

2 个答案:

答案 0 :(得分:10)

自TypeScript 2.4起支持ES提案dynamic import。文件是here

import函数已同步并返回Promise

var x = 'someplace';
import(x).then((a) => {
  // `a` is imported and can be used here
});

或使用async/await

async function run(x) {
  const a = await import(x);
  // `a` is imported and can be used here
}

答案 1 :(得分:7)

您需要指定一个硬编码字符串。变量不起作用。

更新

JavaScript现在获得了动态导入。因此,您可以执行import(x)https://developers.google.com/web/updates/2017/11/dynamic-import

TypeScript也支持它。这就是说你仍然希望这个参数可以静态分析类型安全,例如

const x = 'someplace';
import(x).then((a) => { // TypeScript knows that `x` is 'someplace' and will infer the type of `a` correctly
});