声明文件

结构

全局库

全局库是指能在全局命名空间下访问的(例如:不需要使用任何形式的import)。 许多库都是简单的暴露出一个或多个全局变量。

模块化库

从代码上识别模块化库

例子

UMD

UMD模块是指那些既可以作为模块使用(通过导入)又可以作为全局(在没有模块加载器的环境里)使用的模块。

如果你在库的源码里看到了typeof define,typeof window,或typeof module这样的测试,尤其是在文件的顶端,那么它几乎就是一个UMD库。

模块插件或UMD插件

全局插件

click to edit

使用依赖

依赖全局库

依赖模块

依赖UMD库

从全局库

从一个模块或UMD库

补充说明

防止命名冲突

ES6模块插件的影响

ES6模块调用签名的影响

如果你的全局库依赖于某个UMD模块,使用/// <reference types指令:

举例

api最佳实践

规范

不要用Number,String,Boolean和Object这几张类型,在js中几乎没有正确用过。

回调函数类型

回调函数返回值类型

不要为返回值被忽略的回调函数设置一个any类型的返回值类型

回调函数里的可选参数

应该给返回值被忽略的回调函数设置void类型

不要在回调函数里使用可选参数除非你真的要这么做

重载与回调函数

不要因为回调函数参数个数不同而写不同的重载,应该只使用最大参数个数写一个重载

函数重载

顺序

使用可选参数

使用联合类型

深入

构建umd库

核心概念

类型

类型别名声明(type sn = number | string;)

接口声明(interface I { x: number[]; })

类声明(class C { })

枚举声明(enum E { A, B, C })

指向某个类型的import声明

let,const,和var声明

包含值的namespace或module声明

enum声明

class声明

指向值的import声明

function声明

命名空间

简单的组合:一个名字,多种意义

内置组合

用户组合

高级组合

利用interface添加

使用namespace添加

模板

global-modifying-module.d.ts

global-plugin.d.ts

global.d.ts

module-class.d.ts

module-function.d.ts

module-plugin.d.ts

module.d.ts

发布