一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第17天,点击查看活动详情。
有一些写好的库, 但是并不是使用 TS 编写的为了可以获取 TS 的类型检查, 可以为该库编写声明文件 Jquery 就是这样做的
什么是声明文件
以 .d.ts 结尾的文件就是声明文件
声明文件有什么作用
为 JS 代码提供类型声明
声明文件的位置
-
放置到
tsconfig.json文件中的include配置目录中 -
放置到 ```node_modules/@types 文件夹中
-
手动配置
tsconfig.json中的compilerOptions.typeRoots选项, 配置申明文件的目录(如果写了该配置, 上面两个的配置就失效了) -
于 js 代码所在目录相同, 并且文件名也相同的文件
如何编写声明文件
自动生成
项目是使用 ts 编写的, 在发布(编译)之后是 js 文件
如果发布的 js 文件需要被其他开发者使用, 就可以使用声明文件来描述发布 js 文件中的类型, 就可以在 tsconfig.json 文件中配置 compilerOptions.declaration : true 配置好之后再次编译ts文件就会自动生成声明文件
手动编写
手动编写主要用于对已经使用 js 开发好的库(Jquery) 不需要在使用 ts 在开发一次, 如要在 ts 中使用并且获得类型检查就可以手动编写声明文件
手动书写一下声明文件
-
创建声明文件
-
编写内容, 这里以 nodejs 的 console 举例
全局声明, 一些全局的对象比如 console
declare const console: {
log(message?: any): void
}
用于声明全局对象, 声明文件只能书写类型声明不能进行类型赋值
使用命名空间
declare namespace console {
function log(message?: any): void
}
namespace 表示只能通过 命名空间名.成员 进行使用, 在早期没有 ES 模块化是发挥很大的作用。
模块声明
declare module "lodash" {
export function chunk<T>(arr1: T[], size: number): T[][]
}
///
///用于引入其他的声明文件
/// <reference path="./console.d.ts">
发布
当前工程使用 TS 开发
使用 tsc 打包然后在按照 发布 npm 的方式 发布出去
为其它库编写的声明文件
-
进入到 github 的开源项目:github.com/DefinitelyT…
-
fork到自己的开源项目中
-
将fork的库克隆到本地
-
在本地新建分支开发
-
然后在项目文件中的 types 文件夹中新建文件夹
-
push分支到你的开源库
-
再到官方的开源库中提交 pull request
-
等待官方管理员审核,审核通过就会将你的代码合并到主分支中, 之后你就可以通过
npm install @types/你发布的库名进行下载
总结
声明文件主要用于对 现有的 js 进行类型声明, 已达到在 ts 中使用时有类型声明。