7

Google 的 Closure 编译器有一个“@typedef”标签,但可以在代码中使用它们吗?(我知道它会起作用,但它会皱眉吗?)

所以这是我的类型

/**
 * 计划对象的 typedef
 * @typedef {对象}
 */
类型.计划 = {
    “风格”:“边框小”,
    “宽度”:“50%”,
    “身高”:“40%”,
    "x": "20%",
    "y": "10%",
    “可点击”:是的,
    “可移动”:真
};

然后我可以在我的 JSDoc 注释中使用该类型。

这允许我的 IDE 自动完成传递的参数

所以声明的对象不会在代码中的任何地方使用。

/**
 * 指令类
 * @param {Types.Plan} plan 位置和尺寸计划
 * @param {Manager} manager 经理
 * @param {Instructions} parent 这个小部件的父级指令
 * @return {Instructions} 返回新的指令对象
 */
说明 = 功能(计划、经理、父母){
    计划。
}

那么这样可以吗?还是有更好的解决方案?

4

3 回答 3

8

这可以。您还可以使用记录类型来启用编译器的其他类型检查:

/**
 * @typedef {{
 *   style: string, 
 *   width: string, 
 *   height: string, 
 *   x: string, 
 *   y: string, 
 *   clickable: boolean, 
 *   moveable: boolean
 * }} 
 */
var myType = ...

http://code.google.com/closure/compiler/docs/js-for-compiler.html#types

于 2011-05-11T05:17:41.010 回答
7

@typedef用于定义一个类型,而不是将一个对象标记为某种类型。如果要将某个变量标记为某种类型,请使用@type {<type>}注解。

@typedef用于定义与@type {...}构造一起使用的“速记”类型。

请注意,对象的属性当前未在 Closure Compiler 中输入,即使已标记,但将来可能会输入。

于 2011-05-11T12:39:19.447 回答
1

typedef 旨在创建一种类型,因此不赞成将其也用作命名空间(为其分配对象文字)。不久前,我写了一篇关于各种 typedef 陷阱的博客文章。

于 2018-12-24T07:38:55.907 回答