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

推測ですが、左の部分にタイプを重ねてもらえますか。

/**
 * 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 に答える
0

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

また

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

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

于 2012-12-23T23:00:29.133 に答える