在函数外部导出类型声明

时间:2016-03-04 12:34:10

标签: google-closure-compiler typechecking

我正在尝试使用谷歌闭包编译器(我简称为compiler)来验证这样的JavaScript代码库:

java -jar compiler.jar --js='**.js' --jscomp_error newCheckTypes > NUL 2> gcc.log

问题是我们已经在AMD中有很多代码并且为这样的核心模块编写了注释:

define(function () {
    /** @constructor */
    MyClass () {}
    /** @param {string} s */
    MyClass.prototype.myMethod = function (s) {
        alert(s);
    }
    return MyClass;
});

我想在其他模块中引用类型/** @type {MyClass} */,所以如果我使用错误的参数调用某个方法,它会投诉。

不幸的是,当我使用这种类型的注释时,compiler输出:

Bad type annotation. Unknown type MyClass
    /** @type {MyClass} */

如果我删除了模块去除函数,compiler“理解”我的声明,但我不想以这种方式重写我们的代码。

有没有办法让compiler查看我的类型声明并应用于其他模块?

1 个答案:

答案 0 :(得分:0)

编译器有--transform_amd_modules,它会将AMD模块重写为CommonJS。它仅支持有限数量的define签名,并未得到广泛使用或积极维护。

使用CommonJS模块,您可以使用--process_common_js_modules标志重写代码并将其重新扫描到可由编译器检查的全局类型。 CommonJS模块功能得到了积极维护。