如何在TypeScript公共包pub中暴露私有包priv的类型?
可行替代方案
1. 直接在pub包中导入priv的类型定义文件
不需要额外拆出priv-types包,直接在pub的tsconfig.json里配置include或者paths,指向priv的类型输出目录(比如priv/dist/types)。注意要点:
- 确保
priv编译时开启declaration: true,生成.d.ts类型文件 - 在
pub的package.json中,把priv设为devDependencies(仅用于类型依赖,无需运行时引入),同时在peerDependencies声明对priv类型的版本要求,避免类型版本不匹配 - 发布
pub时无需打包priv的类型文件,仅保留tsconfig中的配置指向即可
2. 使用TypeScript的typeRoots配置
在pub的tsconfig.json中,将priv的类型目录添加到typeRoots数组,TypeScript会自动识别该目录下的类型定义。适合priv类型结构规整的场景,比如所有.d.ts文件统一放在types文件夹下。
3. 类型重导出+打包剥离运行时代码
在pub中创建类型入口文件(比如src/types/index.ts),直接重导出priv的所有类型:
// pub/src/types/index.ts export * from 'priv';
随后在pub的package.json中将priv设为devDependencies,并通过TypeScript的isolatedModules配置或打包工具(如Rollup、esbuild)设置只保留类型导出,剥离所有运行时相关代码。发布后的pub仅包含类型定义,不会引入priv的运行时依赖,用户安装后可直接使用priv的所有类型。
4. 利用tsc --emitDeclarationOnly同步类型
无需单独维护priv-types仓库,可在priv的构建脚本中添加步骤,用tsc --emitDeclarationOnly生成纯类型文件,再通过脚本将这些文件同步到pub的类型目录下。这种方式既不用额外建包,也能保证pub的类型与priv完全同步,省去维护独立类型包的成本。
内容的提问来源于stack exchange,提问作者Remirror
相关产品推荐
相关产品推荐

