typescript 类型脚本和子路径导入

mspsb9vt  于 2022-11-26  发布在  TypeScript
关注(0)|答案(2)|浏览(173)

我正在尝试让节点子路径导入和typescript工作。我的IDE在解析导入时没有问题,但Typescript从来都不开心。
Github回购协议代码:https://github.com/doronrosenberg/ts-subpath-imports
package.json:

"imports": {
    "#internal/*": "./internal/*.ts",
    "#internal2": "./internal"
  }

tsconfig.json:

"paths": {
    "#internal/*": "./internal/*.ts",
    "#internal2": ["./internal"]
  }

和代码:

import { foo } from "#internal/index";
import { bar } from "#internal2";

无论我如何设置,我总是得到:

src/test.ts:1:21 - error TS2307: Cannot find module '#internal/index' or its corresponding type declarations.

1 import { foo } from "#internal/index";
                      ~~~~~~~~~~~~~~~~~

src/test.ts:2:21 - error TS2307: Cannot find module '#internal2' or its corresponding type declarations.

2 import { bar } from "#internal2";
                      ~~~~~~~~~~~~

有什么想法吗?

oyt4ldly

oyt4ldly1#

在用Typescript破解了几个星期之后,我得到了一个可行的解决方案。
假设我有一个名为@kodadot1/metasquid的包,其中包含多个子模块(consolidatorentity)。
在我的package.json中我声明imports

"exports": {
    ".": {
      "import": "./dist/index.mjs",
      "require": "./dist/index.cjs"
    },
    "./consolidator": {
      "types": "./dist/consolidator.d.ts",
      "import": "./dist/consolidator.mjs",
      "require": "./dist/consolidator.cjs"
    },
    "./entity": {
      "types": "./dist/entity.d.ts",
      "import": "./dist/entity.mjs",
      "require": "./dist/entity.cjs"
    }
}

诀窍是为项目根目录中的每个子模块创建一个.d.ts文件。
因此,对于子模块entity,我将创建一个名为entity.d.ts的文件,其中包含

export * from './dist/entity'

现在,要在npmjs中正确发布它,请扩展您的package.json,如下所示:

"files": [
    "dist",
    "*.d.ts"
  ]

现在只需发布,您就可以享受子路径导入:

import { get } from '@kodadot1/metasquid/entity'

Whole code is available here

42fyovps

42fyovps2#

子路径导出的支持需要较新的模块分辨率,如Node16NodeNext

{
  "compilerOptions": {
    "moduleResolution": "Node16" // or `"NodeNext"`
  }
}

相关问题