Skip to content

声明语句

TS 中,编译器并不知道 $ 或 jQuery 是什么东西

typescript
jQuery('#foo'); // Error

我们需要使用 declare var 来定义它的类型

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

jQuery('#foo');

declare var 并没有真的定义一个变量,只是定义了全局变量 jQuery 的类型,仅仅会用于编译时的检查,在编译结果中会被删除。它编译结果是:

javascript
jQuery('#foo');

声明文件

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

typescript
// src/jQuery.d.ts

declare var jQuery: (selector: string) => any;
typescript
// src/index.ts

jQuery('#foo');

一般来说,ts 会解析项目中所有的 *.ts 文件,当然也包含以 .d.ts 结尾的文件。所以当我们将 jQuery.d.ts 放到项目中时,其他所有 *.ts 文件就都可以获得 jQuery 的类型定义了。

假如仍然无法解析,那么可以检查下 tsconfig.json 中的 files、include 和 exclude 配置,确保其包含了 jQuery.d.ts 文件。

第三方声明文件

jQuery 的声明文件不需要我们定义了,社区已经帮我们定义好了。可以直接下载下来使用,但是更推荐的是使用 @types 统一管理第三方库的声明文件。

@types 的使用方式很简单,直接用 npm 安装对应的声明模块即可,以 jQuery 举例:

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

搜索你需要的声明文件:https://www.typescriptlang.org/dt/search/

书写声明文件