🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 声明文件 - 当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能。 - 通常我们会把声明语句放到一个单独的文件(`jQuery.d.ts`) - 一般第三方都有自己的声明文件,可使用如 `npm install @types/jquery --save-dev `的方式下载声明文件 ## 语法 * [`declare var`](https://ts.xcatliu.com/basics/declaration-files.html#declare-var)声明全局变量 * [`declare function`](https://ts.xcatliu.com/basics/declaration-files.html#declare-function)声明全局方法 * [`declare class`](https://ts.xcatliu.com/basics/declaration-files.html#declare-class)声明全局类 * [`declare enum`](https://ts.xcatliu.com/basics/declaration-files.html#declare-enum)声明全局枚举类型 * [`declare namespace`](https://ts.xcatliu.com/basics/declaration-files.html#declare-namespace)声明(含有子属性的)全局对象 * [`interface`和`type`](https://ts.xcatliu.com/basics/declaration-files.html#interface-%E5%92%8C-type)声明全局类型 * [`export`](https://ts.xcatliu.com/basics/declaration-files.html#export)导出变量 * [`export namespace`](https://ts.xcatliu.com/basics/declaration-files.html#export-namespace)导出(含有子属性的)对象 * [`export default`](https://ts.xcatliu.com/basics/declaration-files.html#export-default)ES6 默认导出 * [`export =`](https://ts.xcatliu.com/basics/declaration-files.html#export-1)commonjs 导出模块 * [`export as namespace`](https://ts.xcatliu.com/basics/declaration-files.html#export-as-namespace)UMD 库声明全局变量 * [`declare global`](https://ts.xcatliu.com/basics/declaration-files.html#declare-global)扩展全局变量 * [`declare module`](https://ts.xcatliu.com/basics/declaration-files.html#declare-module)扩展模块 * [`/// <reference />`](https://ts.xcatliu.com/basics/declaration-files.html#san-xie-xian-zhi-ling)三斜线指令 ## 技巧 ## 自动生成声明文件 如果库的源码本身就是由 ts 写的,那么在使用`tsc`脚本将 ts 编译为 js 的时候,添加`declaration`选项,就可以同时也生成`.d.ts`声明文件了 tsconfig.json ``` { "compilerOptions": { "module": "commonjs", "outDir": "lib", "declaration": true, } } ``` **发布声明文件§** 此时有两种方案: 1. 将声明文件和源码放在一起-推荐 2. 将声明文件发布到 @types 下 ### 将声明文件和源码放在一起 方式一: 如果声明文件是通过`tsc`自动生成的,那么无需做任何其他配置,只需要把编译好的文件也发布到 npm 上 方式二: * 给`package.json`中的`types`或`typings`字段指定一个类型声明文件地址 * 在项目根目录下,编写一个`index.d.ts`文件 * 针对入口文件(`package.json`中的`main`字段指定的入口文件),编写一个同名不同后缀的`.d.ts`文件