PNPM monorepo中转导出类型丢失变为any的问题排查
any的问题 你遇到的场景:直接从server/src/q1导入时类型正常,但从server/test导入导出的别名类型就变成any,大概率是配置环节有遗漏,以下是几个需要检查的关键点:
核对
server包的package.json配置
要确保package.json里的types字段指向正确的类型入口。如果server包是编译后使用,需指定编译后的.d.ts文件路径,比如:{ "main": "dist/test.js", "types": "dist/test.d.ts" }如果直接使用源码,要保证
server/test这个导入路径能被解析到对应的源文件,可能需要配合TypeScript的路径映射。检查TypeScript的路径映射配置
在front包或根目录的tsconfig.json中,需要配置paths让server/*指向server包的源码目录,示例:"compilerOptions": { "paths": { "server/*": ["../server/src/*"] } }没有正确的路径映射,TypeScript无法找到
server/test对应的文件,自然无法识别类型。启用TypeScript的复合项目配置
在monorepo中,每个包的tsconfig.json需要开启composite: true,同时保证declaration: true(生成类型声明文件):// server/tsconfig.json { "compilerOptions": { "composite": true, "declaration": true, "declarationMap": true, // 其他编译配置 } }根目录的
tsconfig.json要通过references关联所有包:{ "references": [{"path": "./server"}, {"path": "./front"}] }这样TypeScript能正确追踪跨包的类型依赖关系。
确认PNPM工作区配置
根目录的pnpm-workspace.yaml要正确包含所有子包:packages: - 'server' - 'front'确保PNPM在本地正确链接了工作区包,避免依赖解析异常。
如果以上配置都检查无误但问题依然存在,再构建最小可复现的PNPM工作区示例,能更精准定位问题。
内容的提问来源于stack exchange,提问作者Dimava

