ES6 / 7中是否有`declare`关键字?

时间:2016-02-23 16:50:39

标签: javascript ecmascript-6 babeljs

最近我一直在研究ES6,这导致我经常使用Babel。作为好奇的类型,我开始查看Babel Github存储库,了解他们如何构建这个非常棒的工具,并知道我是否可以以某种方式做出贡献。

但是,我遇到了this file,并且它上面写着declare class BabelNodeSourceLocation {}之类的内容,文件以.js结尾。

这让我很困惑,我现在想知道JavaScript中是否有一个我不知道的声明关键字,或者这只是一个特定于Babel的语法?我的所有Google搜索都没有结果。

更新:将代码放入Babel REPL只会产生任何结果。 Babel只是忽略了代码并且没有产生任何等效的ES5输出。它也没有抛出任何错误。

2 个答案:

答案 0 :(得分:12)

  

,文件以.js。

结尾

这些日子并不意味着很多: - )

  

我想知道JavaScript中是否有declare个关键字,我不知道

不,没有。

  

或者这只是Babel特有的语法?

没有。它是Flow类型检查器的type declaration file

答案 1 :(得分:6)

使用Flow,您可以声明一个全局类,允许您在项目的任何位置引用类类型。这对运行时代码没有影响,也不会影响babel输出。

来自the docs的示例:

declare class URL {
  constructor(urlStr: string): URL;
  toString(): string;

  static compare(url1: URL, url2: URL): boolean;
};

然后在您的项目中,您可以将URL引用为类类型。

同样,您可以声明其他全局类型,模块,函数,变量。保持组织有序的好方法。