闭包编译器中的递归类型

时间:2012-12-22 17:27:43

标签: javascript google-closure-compiler

有没有办法在闭包编译器的输入语法中定义recursive type?换句话说,我可以在其定义中定义一个包含自身的类型吗?

/**
 * A node on the tree.
 * @type {{left: (Tree|null)}}
 */
var Tree = {
    left: null
};

(旁注:是的,这个树的定义是错误的)

虽然上面的编译使用简单的优化,但它会因高级抛出以下错误而失败:

  

JSC_TYPE_PARSE_ERROR:错误类型注释。第3行第17行的未知类型树   * @type {{left:(Tree | null)}}

2 个答案:

答案 0 :(得分:0)

只是一个猜测,但你可以把类型放在左边部分。

/**
 * Not sure what goes here
 */
var Tree = {
    /**
     * @type {Tree}
     */
    left: null
};

您也不需要类型

的构造函数
/**
 * @constructor
 */
var Tree = function(){

    this.left = new Tree()
};

/**
 * @type {Tree}
 */
Tree.prototype.left = null;

您知道,如果使用

实例化类型,您现在可以获得无限递归
var test = new Tree();

答案 1 :(得分:0)

/ **  * @typedef {{left:Tree}} * / var Tree;

/ **  * @interface  * / var Tree = function(){}

/ ** @type {Tree} * / Tree.prototype.left;