【问题标题】:Closure Compiler EXTERNS for PIXI.js - custom object parameter annotationsClosure Compiler EXTERNS for PIXI.js - 自定义对象参数注释
【发布时间】:2016-03-12 00:47:06
【问题描述】:

我正在为 pixijs 库准备 externs 文件以使用闭包编译器。 到目前为止,我遇到的唯一问题是自定义对象参数。这是一个简短的例子:

pixi.js 来源:

/**
 * Set the style of the text
 *
 * @param [style] {object} The style parameters
 * @param [style.font='bold 20pt Arial'] {string} The style and size of the font
 * @param [style.fill='black'] {string|number} A canvas fillstyle that will be used on the text eg 'red', '#00FF00'
 * @param [style.align='left'] {string} Alignment for multiline text ('left', 'center' or 'right'), does not affect single line text

闭包编译器输出:

lib/pixi-externs.js:3266: WARNING - Parse error. invalid param name "style.font"
* @param [style.font='bold 20pt Arial'] {string} The style and size of the font
      ^

lib/pixi-externs.js:3266: WARNING - Bad type annotation. missing closing ]
* @param [style.font='bold 20pt Arial'] {string} The style and size of the font
                        ^

lib/pixi-externs.js:3267: WARNING - Parse error. invalid param name "style.fill"
* @param [style.fill='black'] {string|number} A canvas fillstyle that will be used on the text eg 'red', '#00FF00'
      ^

lib/pixi-externs.js:3268: WARNING - Parse error. invalid param name "style.align"
* @param [style.align='left'] {string} Alignment for multiline text ('left', 'center' or 'right'), does not affect single line text
      ^

这些pixijs注解如何适应闭包编译器注解?

如果没有办法通过注解来实现这一点,我可以通过定义一个新对象来解决这个问题吗?

* @param {PIXI.TextStyleObject} style The style parameters

并像这样创建一个单独的 TextStyleObject 对象定义?

PIXI.TextStyleObject = {};
PIXI.TextStyleObject.font;
PIXI.TextStyleObject.fill;
PIXI.TextStyleObject.align;

解决这个问题的正确方法是什么?

【问题讨论】:

    标签: javascript google-closure-compiler jsdoc pixi.js


    【解决方案1】:

    您需要使用记录对象来执行此操作:

    /** @param {{
     *        font: string,
     *        fill: string,
     *        align: string
     *      }} object
     */
    

    如果您发现自己多次重复使用同一个记录对象,您可以使用 typedef 为其命名:

    /** @typedef {{
     *        font: string,
     *        fill: string,
     *        align: string
     *      }}
     */
     var PixiStyleOptions;
    
    /** @param {PixiStyleOptions} object */
    

    【讨论】:

    • 太好了。感谢您的帮助。
    • 有没有办法指定默认值,比如在pixi中有:[style.fill='black']?
    • 没有。这仅用于类型信息。它与实际代码执行无关。
    • 这是有道理的。最后一个快速子问题:我可以像定义 @typedef 时一样指定带有 = 后缀的可选参数吗?例如{{ font: string, fill: string, align: string= }}
    • 不幸的是不在记录对象中。对于可选的,使用string|undefined
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2018-01-10
    相关资源
    最近更新 更多