ts 接口如何覆盖?
别人定义了一个接口中的参数,但是是模糊定义。
// @types/aaa
interface vcss {
verticalAlign: string | null;
}
我需要改成
// vcss.d.ts
interface vcss {
verticalAlign: 'top' | 'center' | 'bottom' | 'middle'
}
我如果直接写在项目里可以用。但是如果我发包就不行了。在npm包里面,我发一个@types/bbb,然后在项目里面引用就失效了,为什么?
// package.json
{
"name": "@types/bbb",
"dependencies": {
"@types/aaa": "^1.21.0"
},
"file":["*.d.ts"]
}
// index.d.ts
/// <reference types="@types/aaa" />
/// <reference path="vcss.d.ts" />
怎么样才能发布的情况下覆盖他的申明?其他属性不变
回复
1个回答

test
2024-07-18
在npm包里面,我发一个@types/bbb,然后在项目里面引用就失效了
这个是正常的,因为项目中查找 verticalAlign
类型定义时,发现了两处:一个是@types/aaa 一个是在 @types/bbb ,这两个包你都引用了。
解决的话,可以换个方式or思路,提供3个方式可参考下:
- 直接在项目里,声明一个 vcss.d.ts 文件即可,没必要再包装一个npm包。优点是简单明了,缺点就是每次项目中都需要 扩展/合并 这个 verticalAlign 类型。(推荐)
- @types/bbb 中不显式依赖 @types/aaa ,而是全部扩展/改写 @types/aaa
- 给 @types/aaa 提PR,矫正类型(推荐)
- fork @types/aaa ,单独发个包
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容