[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)