TypeScript 项目引用导致多个双重发布模块解析

iaqfqrcu  于 5个月前  发布在  TypeScript
关注(0)|答案(1)|浏览(68)

🔎 搜索词

“模块解析双重引用”

🕗 版本与回归信息

  • 在版本4.9和5.0之间发生了变化
  • 由于在TypeScript 5.0中引入了`"moduleResolution": "bundler",因此无法在之前的版本上进行测试。

⏯ Playground链接

https://github.com/remcohaszing/typescript-resolution-bug

💻 代码

请查看仓库。它不是很大,但包含了许多小的文件,这些文件不便粘贴到问题报告中。
重现步骤:

git clone https://github.com/remcohaszing/typescript-resolution-bug.git
cd typescript-resolution-bug
npm install
npx tsc -b repro

🙁 实际行为

$ tsc -b repro
repro/test/test.ts:4:12 - error TS2345: Argument of type 'import("/home/remco/Projects/typescript-resolution-bug/repro/node_modules/some-lib/index").SomeType' is not assignable to parameter of type 'import("/home/remco/Projects/typescript-resolution-bug/repro/node_modules/some-lib/index").SomeType'.
  Types have separate declarations of a private property 'property'.

4 myFunction(new SomeType())
             ~~~~~~~~~~~~~~

Found 1 error.

🙂 预期行为

以下情况之一:

  1. 如果能成功重现,则认为该重现是有效的,不包含类型错误。
  2. 如果出现错误,但显示已解析路径的实际路径而不是剥离文件扩展名,则错误消息中的路径 完全相同。这种效果的一个好处是,在某些终端模拟器中,路径变得可点击。

关于此问题的附加信息

tsconfig.json 中移除 references 可以解决这个问题。
一个真实世界的例子可以在 https://github.com/remcohaszing/codemirror-languageservice 中找到。只需搜索 @ts-expect-error 即可。

wgx48brx

wgx48brx1#

我将一个 workaround 应用到了实际项目中:我将 module 选项设置为 node16 ,尽管 preserve 更适合与捆绑器一起使用。

相关问题