#3208·lottie-web

类型: 声明使用"export default",但运行时使用"module.exports =",在 node16/nodenext 上破坏 ESM 客户端

作者: Gamote创建于 2026年7月25日更新于 2026年7月25日

页:1

类型声明使用出口默认 ' ,但软件包是CommonJS,运行时间使用module.exports'。 对于自己的文件是无害环境管理的消费者,TypeScript的"node16"/"nodenext"解析度再将默认导入键打入模块命名空间而不是玩家,因此每一次调用都未能打入.

`Arethetypeswrong'报告为[不正确的默认导出](https://GitHub.com/Arethetypeswrong/Arethetypeswrong.ZGitHub.io/blob/main/docs/ problems/FalseExportDefault.md):

JavaScript文件似乎使用“module.exports QQ”的解析类型使用“出口默认值”。 这将使TypeScript在节点16模块模式下认为需要额外的".default"属性访问,但运行时可能失败. 这些类型应使用出口'而不是出口违约 ' 。

环境

  • " [email protected] "
  • TypeScript 5.9.3 (英语).
  • 软件包没有'类型'字段,因此是通用JS。 主要'是./built/player/lotie.js',类型'是`./index.d.ts'。
  • 复制

在有""型号"的包件中:"模块":

贾森克 // tsconfig.json (英语). {"编译者选项":{"模块":"node16","模块解析":"node16","esModule Interop": true }}



从"lottie-web"中导入Lottie;
lottie. 装入动画({容器,动画数据}) ;
错误 TS2740 : “ 导入类型 (...) / lottie- web/ index) ” 缺少以下
属性来自“ LottiePlayer” 类型:播放、暂停、停止、设置和9个。

一个普通JS的消费者没有遇到这种情况,这很可能是它不被注意的原因。

(为什么会发生)

`index.d.ts'结尾为:

宣布Const Lottie: LottiePlayer; 命令: 命令: 命令: 命令: 命令: 命令: 命令: 命令:

导出默认 Lottie ;


在CommonJS的申报文件中,`出口默认'声称`module.exports.default'是玩家。 已建文件是“ 模块 ”。 出口=工厂,因此不存在`.违约'财产。

当节点从无害环境管理中导入一个通用JS模块时,它合成一个默认导出值等于整个"模块.exports"对象,以及忠实的"node16"/"nodenext"模型. 在这两个地方都不存在有效的拼写:`lottie.default'满足了打字机,在运行时是`未定义'的,而普通的默认导入则正确运行而不进行打字检查。

建议改正

`出口 是单一主要出口的通用JS模块的申报表。 它不能与TypeScript报告为"TS2309"的其他出口元素结合,因此22个出口类型需要移动到与康特合并的命名空间:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
- 出口类型动画指令=1 ++-1;
+类型动画 方向= 1 × − 1;
. . . . . . . .
宣布Const Lottie: LottiePlayer; 命令: 命令: 命令: 命令: 命令: 命令: 命令: 命令:

- 出口默认Lottie;
+declare 命名空间 Lottie {
+ 导出{
+ 动画方向,
+ / *... 其余21个名字... *
+ Lottie Player 键,
+};
+}
+ 键
+导出=洛特;

声明合并是让进口类型{动画项目}在变化后从lottie-web'中运作的原因。

六个 " 建设/玩家/*.d.ts " 文件然后再出口合并的实体:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?

  • 导入{ . . . . . . .

内容来源: airbnb/lottie-web