声明文件
相比于JavaScript
,TypeScript
存在着变量上下文和类型上下文,如当index.ts
被编译成index.js
和index.d.ts
,index.js
包含着变量上下文,而index.d.ts
包含着类型上下文(包括变量的声明和类型)
我们可以自行编写声明文件index.d.ts
来辅助我们进行一些工作,事实上tsconfig.json#includes
内所有的ts
和.d.ts
文件都是有效的,除此之外tsconfig.json#types
和tsconfig.json#lib
默认就会分别把node_modules/@types/node
和node_modules/typescript/lib
下对应的声明文件加入到整个编译系统当中。(比如当我们安装了@types/react
后就能在代码中直接使用JSX.Element
这个类型了,这是因为该声明文件内部通过declare global
来声明了全局变量的类型)
目前主流库有两种方案来包含声明文件。第一种方式就是把声明文件作为另一个库发布到上文提到过的node_modules/@types
下;第二种方式是把声明文件也放在当前库下面,通过在package.json#types
中指定声明文件的位置,第二种方式需要注意的是需要显式的把模块引入后才能得到对应的类型提示。