use*_*046 10 node.js typescript
我正在尝试让 Node 子路径导入和打字稿正常工作。我的 IDE 在解析导入时没有问题,但 Typescript 从来不高兴。
包含代码的 Github 存储库:https://github.com/doronrosenberg/ts-subpath-imports。
包.json:
"imports": {
"#internal/*": "./internal/*.ts",
"#internal2": "./internal"
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.json:
"paths": {
"#internal/*": "./internal/*.ts",
"#internal2": ["./internal"]
}
Run Code Online (Sandbox Code Playgroud)
和代码:
import { foo } from "#internal/index";
import { bar } from "#internal2";
Run Code Online (Sandbox Code Playgroud)
无论我如何设置,我总是得到:
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";
~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
小智 12
在使用 Typescript 几周后,我得到了一个可行的解决方案。
假设我有一个名为@kodadot1/metasquid
多个子模块(consolidator
和entity
)的包。
在我的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"
}
}
Run Code Online (Sandbox Code Playgroud)
诀窍是.d.ts
为项目根目录中的每个子模块创建一个文件。
因此,对于子模块,entity
我将创建一个名为的文件entity.d.ts
,其中包含
export * from './dist/entity'
Run Code Online (Sandbox Code Playgroud)
现在要在npmjs中正确发布它,请扩展您的package.json
喜欢:
export * from './dist/entity'
Run Code Online (Sandbox Code Playgroud)
现在只需发布,您就可以享受子路径导入:
import { get } from '@kodadot1/metasquid/entity'
Run Code Online (Sandbox Code Playgroud)
子路径导出的支持需要更新的模块分辨率,例如Node16
和NodeNext
:
{
"compilerOptions": {
"moduleResolution": "Node16" // or `"NodeNext"`
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3963 次 |
最近记录: |