动态加载模块的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模块格式),但这对我来说感觉不对 - 它是一个特定库的解决方案。
答案 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
});