1

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

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

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

尽管上面通过简单的优化进行编译,但它会因高级抛出以下错误而失败:

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

4

2 回答 2

0

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

或者

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

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

于 2012-12-23T23:00:29.133 回答
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();
于 2012-12-22T18:05:26.587 回答