当我从另一个包导入函数时,它会丢失其类型定义。该类型是在该包内全局定义的。其他类型工作正常。 如何解决?
有必要说,我只是执行从yarn 1.22到pnpm的过渡,并且这在之前的提交中已经与yarn一起工作了。 (见底部截图)
pnpm-workspace.yaml
packages:
- apps/*
- packages/*
package.json
"pnpm": {
"overrides": {
"holograph": "link:packages/holograph",
}
},
tsconfig.json
"include": [
"next-env.d.ts",
"src/**/*.ts",
"src/**/*.tsx",
"../../packages/**/*.ts",
"../../packages/**/*.tsx",
"../../packages/next-config/next.global.d.ts",
],
其中
apps/app-v2
(左) 从 packages/holograph
(右)进口。
此外,我注意到在环境声明文件 (
interfaces.d.ts
) 中声明类型是有效的,但在通过 declare global
关键字贡献环境声明时不会被拾取。
恢复提交并使用
yarn
安装后,该类型再次工作。
也在 pnpm 存储库中
在探索 yarn 和 pnpm 工作区之间的差异时,我注意到
holograph
包是从纱线工作区中的根 node_modules
进行符号链接的,但它仅链接到 pnpm 工作区中的 apps/app-v2/node_modules
中。我想这就是所谓的“包提升”或与“包提升”相关的东西,我修复它的方法是我手动指定提供类型作为根中引用的包package.json
,这似乎是工具和 IDE 的真实来源.
所以工作状态是这样的:
apps/app-v2/package.json
"dependencies": {
"holograph": "*",
},
我在根目录中添加了相同的内容
package.json
"devDependencies": {
"holograph": "*",
},
结果是两个
node_modules
现在都链接了 holograph
包。
ll node_modules/ | grep holo
lrwxrwxrwx 1 qwerty qwerty 21 Jul 5 00:15 holograph -> ../packages/holograph/
ll apps/app-v2/node_modules/ | grep holo
lrwxrwxrwx 1 qwerty qwerty 27 Jul 5 00:15 holograph -> ../../../packages/holograph/
并且类型被正确拾取。