首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释TypeScript中的"export =“和"export as namespace”语法

解释TypeScript中的"export =“和"export as namespace”语法
EN

Stack Overflow用户
提问于 2017-06-30 21:32:08
回答 1查看 14.3K关注 0票数 47

我正在尝试使用DefinitelyTyped存储库中的类型声明文件。其中许多文件使用以下模式:

代码语言:javascript
复制
export = React;
export as namespace React;

通过谷歌搜索,我发现了一些关于这一点的参考信息,这些信息被用来使声明文件在基于模块的系统和非基于模块的系统中都可用。然而,我正在努力寻找一个清晰的解释(a)这些行中的每一行到底分别做了什么,以及(b)这种组合是如何支持这两种类型的消费者的。

EN

回答 1

Stack Overflow用户

发布于 2017-06-30 23:03:31

第一种形式用于CommonJS和AMD模块系统。您必须将export = Reactimport React = require('./React')匹配

请参阅给出此示例的documentation

ZipCodeValidator.ts

代码语言:javascript
复制
let numberRegexp = /^[0-9]+$/;
class ZipCodeValidator {
    isAcceptable(s: string) {
        return s.length === 5 && numberRegexp.test(s);
    }
}
export = ZipCodeValidator;

Test.ts

代码语言:javascript
复制
import zip = require("./ZipCodeValidator");

// Some samples to try
let strings = ["Hello", "98052", "101"];

// Validators to use
let validator = new zip();

// Show whether each string passed each validator
strings.forEach(s => {
  console.log(`"${ s }" - ${ validator.isAcceptable(s) ? "matches" : "does not match" }`);
});

export as namespace表单创建了一个全局变量,因此可以在不导入的情况下使用它,但是您仍然可以使用导入的import { name } from "some-library"表单导入它。请参阅给出此示例的documentation

math-lib.d.ts

代码语言:javascript
复制
export const isPrime(x: number): boolean;
export as namespace mathLib;

然后,可以将该库用作模块中的导入:

代码语言:javascript
复制
import { isPrime } from "math-lib";
isPrime(2);
mathLib.isPrime(2); // ERROR: can't use the global definition from inside a module

它也可以用作全局变量,但只能在脚本内部使用。(脚本是没有导入或导出的文件。)

代码语言:javascript
复制
mathLib.isPrime(2);

这里你有一个泛型类型库,它不知道正在使用哪个模块系统,所以它试图覆盖所有的库。

票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44847749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档