我有一个用 JavaScript 编写的现有包,我正在尝试将其转换为 TypeScript。我的问题是,module.exportsES6 模块的等价物是什么?
例如,如果我有以下代码:
module.exports = function () {
console.log("Hello World");
};
我发现在 ES 模块中执行此操作的唯一方法是执行以下操作。
const myFunc = function () {
console.log("Hello World");
};
export default myFunc;
// OR
export { myFunc };
当然,这与module.exports = //....
这导致了这个问题。当我通过 TypeScript 运行它并获得输出的代码时,包的用户要么需要使用一个import defaultExport from "module-name";语句(这还不错),要么require("module-name")他们必须使用而不是能够访问它require("module-name").default(如果他们正在使用标准 JS,而不是 TypeScript)。对于标准 JavaScript 用户来说,这显然是一个重大的 API 更改。
显然,这里的目标是没有破坏性的 API 更改(并且不需要更改客户代码)。
任何解决方案的另一个要求。在包中的其他地方,我需要能够将许多不同的文件导出为一个对象。所以过去我一直在做:
module.exports = {
"thing1": require("./a.js"),
"thing2": require("./b.js")
};
所以我需要能够正常导出它而不需要用户这样做thing1.default。到目前为止,这似乎是一个更简单的要求,因为我正在导出一个 ES Modules 似乎处理得很好的对象。当您导出一个单数(未命名)表达式时,它会变得非常棘手。
有没有办法做到这一点而不必对 API 进行重大更改?
牧羊人nacy
凤凰求蛊
眼眸繁星
相关分类