在线文档教程

Publishing

出版

现在您已经按照本指南的步骤撰写了一个声明文件,现在是发布到npm的时候了。有两种主要的方式可以将您的声明文件发布到npm:

  • 与你的npm软件包捆绑在一起,或者

2. 在npm上发布到@types组织

如果你控制npm包你发布声明,那么第一种方法是有利的。这样,你的声明和JavaScript总是一起旅行。

在你的npm包中包含声明

如果你的软件包有一个主.js文件,你也需要在你的package.json文件中指明主要的声明文件。将该types属性设置为指向您的捆绑声明文件。例如:

{ "name": "awesome", "author": "Vandelay Industries", "version": "1.0.0", "main": "./lib/main.js", "types": "./lib/main.d.ts" }

请注意,"typings"字段是同义词"types",也可以使用。

另请注意,如果您的主声明文件已命名index.d.ts并位于包的根目录(旁边index.js),则不需要标记该"types"属性,但建议这样做。

依赖

所有依赖关系都由npm管理。确保你所依赖的所有声明包"dependencies"在你的部分都有相应的标记package.json。例如,假设我们创作了使用Browserify和TypeScript的包。

{ "name": "browserify-typescript-extension", "author": "Vandelay Industries", "version": "1.0.0", "main": "./lib/main.js", "types": "./lib/main.d.ts", "dependencies": { "browserify": "latest", "@types/browserify": "latest", "typescript": "next" } }

在这里,我们的软件包取决于browserifytypescript软件包。browserify不会将其声明文件与其npm包捆绑在一起,所以我们需要依赖@types/browserify它的声明。typescript另一方面,打包它的声明文件,所以不需要任何额外的依赖关系

我们的软件包公开了来自每个软件包的声明,因此我们browserify-typescript-extension软件包的任何用户也需要具备这些相关性。出于这个原因,我们使用了,"dependencies"而不是"devDependencies",因为否则我们的消费者将需要手动安装这些包。如果我们刚刚编写了一个命令行应用程序,并且不希望我们的软件包被用作库,那么我们可能会使用它devDependencies

红旗

/// <reference path="..." />

不要用/// <reference path="..." />你的声明文件。

/// <reference path="../typescript/lib/typescriptServices.d.ts" /> ....

不要使用/// <reference types="..." />来代替。

/// <reference types="typescript" /> ....

请确保重新访问Consuming dependencies部分以获取更多信息。

打包依赖声明

如果你的类型定义依赖于另一个包:

  • 不要将它与你的文件结合起来,将它们保存在自己的文件中。

  • 不要将声明复制到你的包中。

  • 不要依赖于NPM类型声明包,如果它不打包的声明文件。

发布到@types

@types组织下的软件包使用types-publisher工具DefinitelyTyped自动发布。要将您的声明发布@types包,请向https://github.com/DefinitelyTyped/DefinitelyTyped提交拉取请求。您可以在贡献指南页面找到更多详细信息。