概述
什么是声明文件:以.d.ts
结尾的文件
有什么作用:有些文件因为是 js 写的,没有类型声明,这个时候可以使用声明文件为 js 代码提供类型声明,不然在 ts 中会报错
声明文件声明的位置:
- tsconfig.json 中
include
表示我们的 ts 代码写在哪里,只要我们的声明文件在这个指定的目录内即可,如src
- 可以放置到 node_modules/@types 文件夹中
- 手动在 tsconfig.json 中通过
typeRoots
,指定声明文件在哪里,配置了后,就只以这个目录为准 - 与 js 代码所在目录相同,并且文件名也相同(推荐)
编写声明文件
自动生成
如果我们本来写的时候就是用 ts 写的,那么可以用自动生成(生产环境的代码肯定是纯 js,ts 被编译过后就成为 js,但是如果我们的代码会被别人使用,而且别人也是用的 ts,为了让别人也获得类型检查,这个时候就可以使用声明文件来描述编译后 js 文件的类型)。
自动生成方式:配置 tsconfig.json 中 declaration
为 true
即可。然后再编译的时候就会为每个 js 生成一个声明文件
手动编写
- 对于已有的库,它是使用 js 书写的,并且更改该代码库的代码为 ts 的成本较高。
- 对于一些第三方库,它们使用 js 书写,并且也没有提供声明文件。
首先需要为某一个 js 文件建立一个声明式文件
全局声明:为全局变量声明类型
// 以 console.log 为例
declare var console: {
log(message: any): void
}
// setTimeout
declare function seTimeout(handler:() => void, mill:number):number
模块声明
// 以 lodash 为例,假如 lodash 没有提供类型声明文件
// 新建一个声明文件,在文件内首先声明模块
declare module "lodash" {
export function concat():[]
}