我目前正在为TypeScrip中的API编写包装器,但在CommonJS中try 在构建后使用该包装器时,目前遇到了一个问题.

我有一个班级位于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

然而,如果我在typescript中做同样的测试,它工作得很好.在CommonJS中,我需要使用bm = new BattleMetrics.default()才能让它工作,但我真的宁愿避免这种情况.

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

我如何才能解决这个问题,以便在需要基本文件时能同时在CommonJS和TypeScrip中工作

已更改tsconfig中的导出类型,等未找到解决方案.

推荐答案

您可以修改主文件以将其导出为默认导出,如下所示

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

export { BattleMetricsClass as BattleMetrics };

这确保了TypeScrip转换代码,它将缺省导出导出为与CommonJS兼容的命名导出

当您导入BattleMetics时,您应该可以在没有.default()的情况下使用它

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

const bm = new BattleMetrics('123');

Typescript相关问答推荐

对于使用另一个对象键和值类型的对象使用TS Generics

为什么tsx不判断名称中有"—"的属性?'

如何通过TypeScript中的工厂函数将区分的联合映射到具体的类型(如类)?

具有泛型类型和缺省值的键

使用动态主体初始化变量

有条件地删除区分的联合类型中的属性的可选属性

如何在Reaction路由v6.4加载器和操作中获得Auth0访问令牌?

如何将所有props传递给React中的组件?

角效用函数的类型推断

分解对象时出现打字错误

TypeScrip:从对象中提取和处理特定类型的键

RXJS将对键盘/鼠标点击组合做出react

缩小对象具有某一类型的任意字段的范围

如何正确地将元组表格输入到对象数组实用函数(如ZIP)中,避免在TypeScrip 5.2.2中合并所有值

TypeScrip:使用Cypress测试包含插槽的Vue3组件

TS不能自己推断函数返回类型

替换typescript错误;X类型的表达式可以';t用于索引类型Y;带有未定义

有没有一种方法可以防止我的组件包在其中安装样式组件'; node 模块中的s目录

将对象数组传递给 Typescript 中的导入函数

从接口推断模板参数?