是否可以在C#中使用属性来注释JavaScript函数参数?
示例(C#):
public void DoSomething([RequiredAction(Action="some_action")] Client client) {
// ...
}
目标是 - 给定一个功能 - 使用反射来检查例如"类型"参数和在调用之前执行必要的转换。 JavaScript 确实是动态类型的,但是例如可以想要使用注释来定义"类型"实例,特定函数需要(例如,param
应该是整数或数组)。
编辑:类型方面只是注释的一种可能用途。例如,还可以指定必须首先在该属性上运行特定函数,或者像数组的最大允许长度等方面。
当然可以使用this answer并使用特定参数前缀来注释参数。例如,Hungarian notation sParam
将标识参数应该是一个字符串。但这不是真正方便,也不可扩展,因为它需要指定名称。是否有更通用的方法来实现这一目标?
答案 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
*/
但是,在函数声明本身中无法做到这一点。