Sta*_*kop 8 import module typescript
什么是动态加载模块的TypeScript方式(模块的路径在运行时已知)?我试过这个:
var x = "someplace"
import a = module(x)
Run Code Online (Sandbox Code Playgroud)
但似乎TypeScript编译器希望在编译时将路径视为导入/模块中的字符串:
$ tsc test.ts
/tmp/test.ts(2,19): error TS1003: Identifier expected.
/tmp/test.ts(2,20): error TS1005: ';' expected.
Run Code Online (Sandbox Code Playgroud)
我知道我可以直接使用RequireJS(如果我使用amd模块格式),但这对我来说感觉不对 - 它是一个特定库的解决方案.
ale*_*ung 14
从TypeScript 2.4开始支持ES提议动态导入.文件在这里.
import
函数是同步的并返回一个Promise
.
var x = 'someplace';
import(x).then((a) => {
// `a` is imported and can be used here
});
Run Code Online (Sandbox Code Playgroud)
或使用async/await
:
async function run(x) {
const a = await import(x);
// `a` is imported and can be used here
}
Run Code Online (Sandbox Code Playgroud)
您需要指定一个硬编码字符串.变量将无法工作,因为这意味着代码必须存在于import(x)
打字机将为您生成的调用之外.您的所有文件代码必须实际生活在"内部"这个定义调用javascript生成.:)
但是,如果您不使用打字稿AMD功能并且只使用requirejs.d.ts,您可以自己完成
如果您想动态地从默认导出中提取类型,可以这样做:
const dynamicImport = await import('path-to-import')
const typedDefaultImport = dynamicImport.default
Run Code Online (Sandbox Code Playgroud)