类型: 声明使用"export default",但运行时使用"module.exports =",在 node16/nodenext 上破坏 ESM 客户端
页: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