没有将动态导入包裹在承诺中,就无法导出动态导入

时间:2018-12-05 16:55:59

标签: javascript typescript ecmascript-next dynamic-import

这是我在浏览器和终端之间共享通用代码库的最后一个障碍。问题是environment/index.ts收到了从index.ts (entry point)导出的类实例,并包装在Promise中。由于无法将export嵌套在import().then()中,并且不能在顶层使用await,因此我不确定此问题是否可以解决。 This medium article似乎最接近解决我的问题,但是为ES2017 consumer and exporter提出的解决方案仍然作为Promise导入。

environment / browser.ts

class Browser { /* ... */ };

export default Browser;

环境/terminal.ts

class Terminal { /* ... */ };

export default Terminal;

环境/index.ts

export default (async function(resolve) {
    return new (await import(environment)).default();
})();

index.ts(入口点)

import term from "./environment";

// Expecting: `[Function: Terminal]`
console.log(term); // But got: `Promise { <pending> }`

关于如何避免将term导入承诺的任何想法?


这是我的工作方式,但是我必须使用require:

import { Browser } from "./browser";

// This is pretty terrible, but I can't find a better way to do it.
let Environment = typeof(process) !== "undefined" ? require("./terminal").Terminal : Browser;

let terminal = new Environment();

export { terminal };

我将悬而未决,希望有更好的方法。

0 个答案:

没有答案