注释javascript函数参数?

时间:2015-01-18 12:40:55

标签: javascript reflection annotate

是否可以在C#中使用属性来注释JavaScript函数参数?

示例(C#)

public void DoSomething([RequiredAction(Action="some_action")] Client client) {
    // ...
}

目标是 - 给定一个功能 - 使用反射来检查例如"类型"参数和在调用之前执行必要的转换。 JavaScript 确实是动态类型的,但是例如可以想要使用注释来定义"类型"实例,特定函数需要(例如,param应该是整数或数组)。

编辑:类型方面只是注释的一种可能用途。例如,还可以指定必须首先在该属性上运行特定函数,或者像数组的最大允许长度等方面。

当然可以使用this answer并使用特定参数前缀来注释参数。例如,Hungarian notation sParam将标识参数应该是一个字符串。但这不是真正方便,也不可扩展,因为它需要指定名称。是否有更通用的方法来实现这一目标?

2 个答案:

答案 0 :(得分:3)

我喜欢使用JSDOC,这些不会在运行时检查,但可以在某些编辑器中检查(例如komodo edit)和独立应用程序(我认为Google closure compiler是一个) 。一个例子。

/**
 * @namespace {Object} myObject
 */
var myObject = {};

/**
 * This returns true if the operand inputArg is a String.
 * @memberof myObject
 * @name something
 * @function
 * @param {*} inputArg
 * @returns {boolean}
 */
myObject.something = function (inputArg) {
    return type inputArg === 'string';
};

答案 1 :(得分:0)

如果您需要参数类型而不是注释其类型,那么最能做的就是创建一个函数来模拟它。

function assertType(val, type) {
    if (typeof val != type) {
        throw new Error("`" + val + "` is not of the data type `" + type + "`.");
    }
}
function Double(num) {
    assertType(num, "number");
    return num * 2;
}
console.log(Double("malformed"));
/*
Error: `malformed` is not of the data type `number`.
    at assertType:14:9
    at double:18:2
    at eval:21:13
    at eval
*/

但是,在函数声明本身中无法做到这一点。