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

栏目: JavaScript · 发布时间: 5年前

内容简介:继续上篇文章[来自全局库如果您的全局库依赖于UMD模块,请使用

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

对UMD库的依赖性

来自全局库

如果您的全局库依赖于UMD模块,请使用 /// <reference types指令

/// <reference types="moment" />

function getThing(): moment;

来自模块或UMD库

如果您的模块或UMD库依赖于UMD库,请使用import语句:

import * as someLib from 'someLib';

不要使用 /// <reference指令 声明对UMD库的依赖!

补充说明

防止名称冲突

请注意,在编写全局声明文件时,可以在全局范围中定义许多类型。 我们强烈反对这一点,因为当许多声明文件在项目中时,它会导致可能无法解析的名称冲突。

一个简单的规则是仅通过库定义的任何全局变量声明命名空间类型。 例如,如果库定义全局值'cats',您应该写

declare namespace cats {
    interface KittySettings { }
}

而不是

// at top-level
interface CatsKittySettings { }

还可以确保在不破坏声明文件用户的情况下将库转换为UMD。

ES6对模块插件的影响

某些插件在现有模块上添加或修改顶级导出。 虽然这在CommonJS和其他加载器中是合法的,但ES6模块被认为是不可变的,并且这种模式是不可能的。 因为TypeScript与加载程序无关,所以没有编译时强制执行此策略,但是打算转换到ES6模块加载程序的开发人员应该知道这一点。

ES6对模块呼叫签名的影响

许多流行的库(如Express)在导入时将自身暴露为可调用函数。 例如,典型的Express用法如下所示:

import exp = require("express");
var app = exp();

在ES6模块加载器中,顶级对象(此处导入为exp)只能具有属性; 顶级模块对象永远不可调用。 这里最常见的解决方案是为可调用/可构造对象定义默认导出; 某些模块加载程序填充程序将自动检测此情况并使用默认导出替换顶级对象。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

人月神话

人月神话

弗雷德里克.布鲁克斯 / UMLChina翻译组、汪颖 / 清华大学出版社 / 2007-9 / 48.00元

在软件领域,很少能有像《人月神话》一样具有深远影响力和畅销不衰的著作。Brooks博士为人们管理复杂项目提供了最具洞察力的见解,既有很多发人深省的观点,又有大量软件工程的实践。本书内容来自Brooks博士在IBM公司SYSTEM/360家族和OS/360中的项目管理经验,该项目堪称软件开发项目管理的典范。该书英文原版一经面世,即引起业内人士的强烈反响,后又译为德、法、日、俄、中、韩等多种文字,全球......一起来看看 《人月神话》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

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

在线 XML 格式化压缩工具

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

Markdown 在线编辑器