已fork模块foo并重命名为@org/foo,如何映射@types/foo无需fork@types?
问题翻译
我fork了一个大型模块foo,它配套有类型声明库@types/foo。我把新fork的模块重命名为@org/foo,而且这个fork版本的类型声明不需要做任何改动。请问能不能直接把@types/foo映射到新的模块名称@org/foo(比如创建@org/types-foo),而不需要fork整个@types模块?
解决方案
当然可以,完全不需要fork整个@types仓库,以下是几种实用的实现方式:
1. 直接在@org/foo的package.json中指定类型
在你重命名后的@org/foo模块的package.json里,直接将类型声明指向已安装的@types/foo:
{ "name": "@org/foo", "types": "./node_modules/@types/foo/index.d.ts", // 其他包配置字段... }
这样当项目同时安装@org/foo和@types/foo后,TypeScript会自动识别到对应的类型声明。
2. 创建轻量转发型@org/types-foo包
如果想把类型声明归到自己的组织名下,可以创建一个极简的转发包,无需复制原类型文件:
- 新建项目,
package.json配置如下:
{ "name": "@org/types-foo", "version": "1.0.0", "main": "index.d.ts", "types": "index.d.ts", "dependencies": { "@types/foo": "^x.x.x" // 声明对原类型包的依赖 } }
- 在
index.d.ts中直接导出原类型:
export * from '@types/foo';
将这个包发布到npm仓库后,使用@org/foo时只需安装@org/types-foo,TypeScript会自动关联类型。
3. 项目内通过tsconfig.json路径映射
如果仅在个人项目中使用,无需改动包或发布新类型包,可以在项目的tsconfig.json里配置路径映射:
{ "compilerOptions": { "paths": { "@org/foo": ["node_modules/@types/foo"] } } }
这种方式仅对当前项目生效,适合快速测试或局部使用场景。
注意:无论采用哪种方式,都需要确保项目中已安装@types/foo依赖,否则会出现类型找不到的错误。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

