发布声明文件
发布声明文件有两种方式:
将声明文件与 npm 包绑定在一起。(推荐)
发布到
@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 的文档中已经有了详细的介绍,以官方文档为准。
这有帮助吗?