TypeScript 使用nodenext和通配符解析模块package.json导出中的模块

lsmd5eda  于 3个月前  发布在  TypeScript
关注(0)|答案(3)|浏览(39)

Bug报告

🔎 搜索词

Nodenext通配符,类型不能命名

🕗 版本与回归信息

仅在使用nodenext进行模块解析时出现此问题

⏯ Playground链接

可克隆的仓库:https://github.com/geoffreytools/effect-test-tsc

💻 代码

import { TaggedClass } from '@effect/data/Data';
// import '@effect/data/Equal';

export class Foo extends TaggedClass('Foo')<{}> {}

🙁 实际行为

The inferred type of 'Foo' cannot be named without a reference to '../node_modules/@effect/data/Equal'. This is likely not portable. A type annotation is necessary.

🙂 预期行为

在不使用nodenext的情况下正确编译,它可以正常工作,并且同样的问题不会影响到其他传递导入,例如Hash,它们以相同的方式导出。只要有对Equal的显式导入,或者在库的package.json中添加以下内容,问题就会消失:

{
  "exports": {
    "./Equal": {
      "import": {
        "types": "./Equal.d.ts",
        "default": "./mjs/Equal.mjs"
      }
    }
  }
}

请注意,该库使用通配符./*将每个导入Map到一个文件,这可以通过node完全解析。

6yoyoihd

6yoyoihd1#

这个影响所有多模块/多入口模块。
有人能看一下吗?在esm中使用这个bug构建真的很繁琐。
这个bug也出现在模块自我导入的情况下。

wxclj1h5

wxclj1h52#

我认为 #56107 是这个问题的重复——请参阅我在那里的分析。
这会影响所有多模块/多入口模块。
#56107 特定于 Effect 使用的再导出模式;我没有看到其他库受到此问题的影响。@datner,你可能遇到了完全不同的事情。如果有人在 Effect 之外遇到这个问题,请提供一个复现示例,以便我们看看是否有其他不同之处。

ugmeyewa

ugmeyewa3#

我认为 #56107 是这个问题的重复——请参阅我在那里的分析。
这影响了所有多模块/多入口模块。
#56107 特定于 Effect 使用的再导出模式;我没有看到其他库受到此问题的影响。@datner,你可能遇到了完全不同的事情。如果有人在 Effect 之外遇到这个问题,请提供一个复现示例,以便我们看看是否有其他不同之处。
这里对 Effect 有什么特殊之处?我们只是重新导出一个模块

相关问题