如何创建高质量的TypeScript声明文件(二)

栏目: Node.js · 发布时间: 6年前

内容简介:继续上篇文章[有些库只能在模块加载器环境中工作。 例如,因为express仅适用于Node.js,必须使用CommonJS require函数加载。ECMAScript 2015(也称为ES2015,ECMAScript 6和ES6),CommonJS和RequireJS具有类似的导入模块的概念。 例如,在JavaScript CommonJS(Node.js)中,您可以编写

继续上篇文章[ 如何创建高质量的TypeScript声明文件(一) ]

模块化库

有些库只能在模块加载器环境中工作。 例如,因为express仅适用于Node.js,必须使用CommonJS require函数加载。

ECMAScript 2015(也称为ES2015,ECMAScript 6和ES6),CommonJS和RequireJS具有类似的导入模块的概念。 例如,在JavaScript CommonJS(Node.js)中,您可以编写

var fs = require("fs");

在TypeScript或ES6中,import关键字用于相同的目的:

import fs = require("fs");

您通常会看到模块化库在其文档中包含以下行之一:

var someLib = require('someLib');

define(..., ['someLib'], function(someLib) {

});

与全局模块一样,您可能会在UMD模块的文档中看到这些示例,因此请务必查看代码或文档。

从代码中识别模块库

模块化库通常至少具有以下某些功能:

  • 无条件调用require或define
  • import * as a from 'b'的声明,或export c;
  • 对exports或module.exports的赋值

他们很少会:

  • 分配window或global的属性

模块化库的示例

许多流行的Node.js库都在模块系列中,例如express,gulp和request。

UMD

UMD模块可以用作模块(通过导入),也可以用作全局模块(在没有模块加载器的环境中运行)。 许多流行的库,如Moment.js,都是以这种方式编写的。 例如,在Node.js中或使用RequireJS,您可以编写:

import moment = require("moment");
console.log(moment.format());

而在vanilla浏览器环境中,你会写:

console.log(moment.format());

识别UMD库

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库的文档通常还会演示一个"Using in Node.js"示例,其中显示了require,以及一个"Using in the browser"示例,该示例显示了使用 <script> 标记加载脚本。

UMD库的示例

大多数流行的库现在都可以作为UMD包使用。 示例包括jQuery,Moment.js,lodash等等。

模板

模块有三个模板,module.d.ts,module-class.d.ts和module-function.d.ts。

如果您的模块可以像函数一样被调用,请使用module-function.d.ts:

var x = require("foo");
// Note: calling 'x' as a function
var y = x(42);

请务必阅读脚注" ES6对模块调用签名的影响 "

如果您的模块可以使用new构建,请使用module-class.d.ts:

var x = require("bar");
// Note: using 'new' operator on the imported variable
var y = new x("hello");

同样的脚注适用于这些模块。

如果您的模块不可调用或可构造,请使用module.d.ts文件。

未完待续...


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python金融衍生品大数据分析:建模、模拟、校准与对冲

Python金融衍生品大数据分析:建模、模拟、校准与对冲

【德】Yves Hilpisch(伊夫·希尔皮斯科) / 蔡立耑 / 电子工业出版社 / 2017-8 / 99.00

Python 在衍生工具分析领域占据重要地位,使机构能够快速、有效地提供定价、交易及风险管理的结果。《Python金融衍生品大数据分析:建模、模拟、校准与对冲》精心介绍了有效定价期权的四个领域:基于巿场定价的过程、完善的巿场模型、数值方法及技术。书中的内容分为三个部分。第一部分着眼于影响股指期权价值的风险,以及股票和利率的相关实证发现。第二部分包括套利定价理论、离散及连续时间的风险中性定价,并介绍......一起来看看 《Python金融衍生品大数据分析:建模、模拟、校准与对冲》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器