[TOC]
当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能。
# 什么是声明文件
声明文件必需以`.d.ts`为后缀。
一般来说,ts 会解析项目中所有的`*.ts`文件,当然也包含以`.d.ts`结尾的文件。所以当我们将`jQuery.d.ts`放到项目中时,其他所有`*.ts`文件就都可以获得`jQuery`的类型定义了。
# npm 包
npm 包的声明文件主要有以下几种语法:
* `export` 导出变量
* `export namespace` 导出(含有子属性的)对象
* `export default` ES6 默认导出
* `export =` commonjs 导出模块
# 常见声明
# `declare namespace` 声明(含有子属性的)全局对象
# `declare module` 扩展原有模块
如果是需要扩展原有模块的话,需要在类型声明文件中先引用原有模块,再使用`declare module`扩展原有模块:
~~~ts
// types/moment-plugin/index.d.ts
import * as moment from 'moment';
declare module 'moment' {
export function foo(): moment.CalendarKey;
}
~~~
# `/// <reference />` 三斜线指令
随着 ES6 的广泛应用,现在已经不建议再使用 ts 中的三斜线指令来声明模块之间的依赖关系了。
但是在声明文件中,它可以用来导入另一个声明文件。
类似于声明文件中的`import`。仅当在以下几个场景下,我们才需要使用三斜线指令替代`import`:
* 当我们在**书写**一个全局变量的声明文件时
* 当我们需要**依赖**一个全局变量的声明文件时
# 参考
[声明文件](https://ts.xcatliu.com/basics/declaration-files.html)
[TypeScript 类型声明完全指南 | 王鹏飞 (pengfeixc.com)](https://www.pengfeixc.com/blogs/javascript/typescript-declarations)