如何使默认导出与CommonJS兼容

问题描述 投票:0回答:1

我目前正在为 TypeScript 中的 API 编写包装器,但在构建后尝试在 CommonJS 中使用所述包装器时遇到问题。

我有一个班级位于

BattleMetrics.ts

export default class BattleMetrics {
    private axios: any;
    constructor(token: string) {
      ....
    }
}

然后将该类导入到主文件中,并默认导出;

import BattleMetrics from './src/BattleMetrics';

export default BattleMetrics;

但是,一旦构建完成,如果我制作一个

test.js
文件并按照

的方式编写一些内容
const BattleMetrics = require('../../dist/index.js')

const bm = new BattleMetrics('123')

我会得到错误

TypeError: BattleMetrics is not a constructor

但是,如果我在打字稿中进行相同的测试,它就可以正常工作。在 CommonJS 中,我需要使用

bm = new BattleMetrics.default()
才能使其工作,但我真的宁愿避免这样做。

如果我编辑编译后的index.js,在.export 前面添加“模块”,它会按预期工作。

我如何解决这个问题,以便在需要时基本文件可以在 commonJS 和 TypeScript 中工作

更改了 tsconfig 中的导出类型等,但未找到解决方案。

typescript wrapper commonjs
1个回答
0
投票
You can modify your main file to export it as a default export like this

// main.ts
import BattleMetricsClass from './src/BattleMetrics';

export { BattleMetricsClass as BattleMetrics };



// test.ts
const { BattleMetrics } = require('../../dist/index.js');

const bm = new BattleMetrics('123');
© www.soinside.com 2019 - 2024. All rights reserved.