UMD库(js库)撰写d.ts声明文件注意事项
在typescript中使用js库时,为了更友好的代码提示,需要为js库撰写d.ts声明文件。
一般来说js库大致可以分为3类:全局库、模块化库、UMD库。
这里重点记录一下UMD库的d.ts撰写注意事项。
识别UMD库
UMD模块是指那些既可以作为模块使用(通过导入)又可以作为全局(在没有模块加载器的环境里)使用的模块。 许多流行的库,比如 Moment.js,就是这样的形式。
UMD模块会检查是否存在模块加载器环境。 这是非常容易观察到的模块,它们会像下面这样:
(function (root, factory) {
if (typeof define === "function" && define.amd) {
define(["libName"], factory);
} else if (typeof module === "object" && module.exports) {
module.exports = factory(require("libName"));
} else {
root.returnExports = factory(root.libName);
}
}(this, function (b) {
如果你在库的源码里看到了typeof define,typeof window,或typeof module这样的代码,尤其是在文件的顶端,那么它几乎就是一个UMD库。
UMD库的d.ts声明文件注意事项:
格式要求
UMD库的d.ts声明文件需要满足以下格式,在VS code中和编译后才不会报错。declare namespace XXX{ }; export as namespace XXX; export=XXX;
引入js库方式:
import XXX=require("./xxx.js);