发布声明文件

发布声明文件有两种方式:

  1. 将声明文件与 npm 包绑定在一起。(推荐)

  2. 发布到 @types 里。(npm 包的维护者没有提供声明文件)

判断依据是 package.json 中有 types 字段,或者有一个 index.d.ts 声明文件。这种模式不需要额外安装其他包,是最为推荐的,所以以后我们自己创建 npm 包的时候,最好也将声明文件与 npm 包绑定在一起。

我们只需要尝试安装一下对应的 @types 包就知道是否存在该声明文件,安装命令是 npm install @types/axios --save-dev。这种模式一般是由于 npm 包的维护者没有提供声明文件,所以只能由其他人将声明文件发布到 @types 里了。

将声明文件和源码放在一起

如果声明文件是通过 tsc 自动生成的,那么无需做任何配置,只需要把编译好的文件发布到 npm 上即可。

如果是手动写的声明文件,那么需要满足以下条件之一,才能背正确加载。

  • package.json 中的 types 或者 typings 字段指定一个路径。

  • 在项目根目录下,编写一个 index.d.ts 文件。

  • 针对入口文件(package.json 中的 main 字段指定的入口文件),编写一个同名不同后缀的 .d.ts 文件。

第一种方式是给 package.json 中 types 或 typings 字段制定一个类型声明文件的地址。

{
  "name": "foo",
  "types": "./dist/index.d.ts"
}

如果没有指定 types 或者 typings,那么就会在目录下寻找 index.d.ts 文件。将它作为类型声明文件。

如果 index.d.ts 文件也不存在,那么就会寻找入口文件(package.json 中的 main 字段指定的入口文件)是否有一个同名不同后缀的 .d.ts 文件。

有的库为了支持自模块的导入,例如import bar from 'foo/lib/bar' ,就需要额外再编写一个类型声明文件 lib/bar.d.ts或者lib/bar/index.d.ts 文件。

将声明文件发布到 @types 下

普通的 npm 模块不同,@types 是统一由 DefinitelyTyped 管理的。要将声明文件发布到 @types 下,就需要给 DefinitelyTyped 创建一个 pull-request,其中包含了类型声明文件,测试代码,以及 tsconfig.json 等。

pull-request 需要符合它们的规范,并且通过测试,才能被合并,稍后就会被自动发布到 @types 下。

DefinitelyTyped 中创建一个新的类型声明,需要用到一些工具,DefinitelyTyped 的文档中已经有了详细的介绍,以官方文档为准。

这有帮助吗?