Невозможно экспортировать динамический импорт, если он не заключен в обещание - PullRequest
0 голосов
/ 05 декабря 2018

Это мое последнее препятствие в разделении общей базы кода между браузером и терминалом.Проблема в том, что экземпляр класса, экспортированный из environment/index.ts, принимается index.ts (entry point) как завернутый в Promise.Поскольку я не могу вложить export в import().then() и не могу использовать await на верхнем уровне, я не уверен, что у этой проблемы есть решение. Эта средняя статья показалась мне наиболее близкой к решению моей проблемы, но решение, предложенное для ES2017 consumer and exporter, все еще импортируется как Обещание.

environment / browser.ts

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

export default Browser;

Environment / Terminal.TS

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

export default Terminal;

Environment / 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 };

Я оставлю этот вопрос открытым в надежде на лучший способ.

...