Это мое последнее препятствие в разделении общей базы кода между браузером и терминалом.Проблема в том, что экземпляр класса, экспортированный из 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 };
Я оставлю этот вопрос открытым в надежде на лучший способ.