我有一个已发布的 TypeScript 模块(我们称之为shared-stuff
) 旨在由其他 TypeScript 模块导入。这shared-stuff
模块具有第三方依赖项,但没有@types
-范围声明,因此该模块内部有几个声明文件:
/lib/declarations/
something.d.ts
another-thing.d.ts
这些声明文件在以下环境下工作得很好shared-stuff
。但是,一旦消费应用程序开始从shared-stuff
,TypeScript 给了我这样的错误:
找不到模块“another-thing”的声明文件。
我可以通过让消费者明确导入来解决这个挑战.d.ts
文件来自依赖项,但这并不理想,因为每个消费者都必须做同样的事情。
有没有办法让消费模块“继承”依赖项的声明?
由于您的消费者(shared-stuff
) 依赖于以下类型another-thing
,您也需要导出它们。
一种方法是使用/// <reference>
在你的index.ts
(并记住包括您的/lib/declarations
在你的发行版中。
另一种方法是不依赖外部类型。即,而不是这样做:
import { SomeType } from 'another-thing'
export function foo(): SomeType { ... }
自己定义该类型(在shared-stuff
,而不是在another-thing.d.ts
):
export type SomeType = { ... }
export function foo(): SomeType { ... }
理论上,类型another-thing
应该像库本身一样遵循语义版本,但实际上它更容易发生重大更改。
原因之一是该库一开始就不是用 TypeScript 编写的,因此库作者可能会在不知情的情况下意外破坏类型。
因此,虽然与重用类型相比,自己声明类型听起来很脆弱,但事实并非如此。 (在你的情况下,无论如何你都是自己定义它们的)。
只要确保您有一套好的测试来捕获任何类型的破坏性更改即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)