如何为新库编写打字稿定义文件?

How to write typescript definition files for new library?

如果您要编写自己的开源打字稿库,您将如何构建打字稿和打字稿定义?据我了解,编译器确实存在定义文件,因此当您的库被使用时,智能感知可以帮助消费者。

但是,在开发库时,定义文件在内部是如何工作的?你会把你所有的类型(接口,类,等等)放在一个 {module}.d.ts 文件中并在内部引用定义文件,这样你就不必写两次类型(一次在 {module}.ts 中,一次在 {module}.d.ts?

在 typescript 编译器选项中,将 "declaration" 设置为 true 有什么意义?对我来说,如果它不是很有帮助(即评论),那么自动创建定义文件似乎没有帮助。

如果您的库有多个模块,您会为每个模块编写单独的定义并在定义之间添加引用,然后将它们与一些自动化程序(即 gulp、grunt)连接起来吗?

公开您的库以便打字稿使用者和 javascript 使用者都可以使用您的库的推荐方法是什么?

你会如何用 typescript 编写测试?您会在测试文件中导入打字稿模块吗?

在使用打字稿开发库时,您不会使用自己的 classes 定义。他们 'self contained' 并且已经向 transpiler/IDE 提供了所有类型信息。这些定义正如您为外部消费者提到的那样。

declaration 设置为 true 的目的是摆脱从 typescript classes 收集类型信息并将其粘贴到定义文件中的繁琐工作。正如我所说,此信息已存在于打字稿文件中,并且可以由转译器自动提取。

关于如何组织定义和公开它们的方式 - 我确信有多种不同的方式,但有一点是肯定的 - 你不想在两个地方手动编写相同的 class 定义.话虽如此,我可以给你一个我如何公开库 project and consume it in another one 的示例。 注意那里的 index.ts 文件以及根文件是如何在 package.json -> typings 字段中公开的。在那里您还可以通过 jasmine 找到库的单元测试示例。

希望这能为您提供一些有关如何进行库开发的信息。