# Ts 声明文件

语法索引

# 声明语句

假如我们要使用 Jquery, 在 Ts 中我们并不知道 $ 和 jQuery 是什么

这时我们使用 declare var 来定义他的类型

declare var jQuery: (selector: string) => any;
1

# 声明文件

通常我们会把声明语句放到一个单独的文件(jQuery.d.ts)中,这就是声明文件

# 第三方声明文件

推荐的是使用 @types 统一管理第三方库的声明文件

可以在 这里 (opens new window) 搜索你需要的声明文件

以 jQuery 为例

npm install @types/jquery --save-dev
1

# 书写声明文件

# 全局变量

主要用以下几个语法:

  • declare var | let | const 声明全局变量
  • declare function 声明全局方法
  • declare class 声明全局类
  • declare enum 声明全局枚举类型
  • declare namespace 声明 ( 含有子属性的 ) 全局对象 (就是 es6 之前的 module, 后面跟 es6 的模块化化命名冲突, 就改名叫 namespace 了)
  • interface 和 type 声明全局类型

# 声明合并

// src/jQuery.d.ts

declare function jQuery(selector: string): any;
declare namespace jQuery {
  function ajax(url: string, settings?: any): void;
}
// src/index.ts

jQuery("#foo");
jQuery.ajax("/api/get_something");
1
2
3
4
5
6
7
8
9
10

# npm 包

npm 包的声明文件主要有以下几种语法:

# 发布声明文件

此时有两种方案:

  1. 将声明文件和源码放在一起

  2. 将声明文件发布到 @types

  3. 比如 package.json 是这样时:

{
  "name": "foo",
  "version": "1.0.0",
  "main": "lib/index.js"
}
1
2
3
4
5

就会先识别 package.json 中是否存在 typestypings 字段。发现不存在,那么就会寻找是否存在 index.d.ts 文件。如果还是不存在,那么就会寻找是否存在 lib/index.d.ts 文件。假如说连 lib/index.d.ts 都不存在的话,就会被认为是一个没有提供类型声明文件的库了。

  1. 与普通的 npm 模块不同,@types 是统一由 DefinitelyTyped (opens new window) 管理的。要将声明文件发布到 @types 下,就需要给 DefinitelyTyped (opens new window) 创建一个 pull-request,其中包含了类型声明文件,测试代码,以及 tsconfig.json 等。
Last Updated: 9/1/2021, 2:33:08 PM