当我在intellij想法中编写javascript时,我可以检查我正在调用的函数的参数,它会说像
我不确定这是否是intellij功能,它知道标准库,或者它是否是一个javascript功能,允许您将参数标记为可选/必需。无论哪种方式,我想学习如何使用可选/必需参数创建自己的函数。我所知道的是可选的似乎是默认值,因为Intellij说我的所有函数的参数都是可选的。
从我看到的答案中,听起来这是一个Intellij功能。但是,现在我想知道Intellij是否为我提供了将自己的函数参数标记为可选/必需的方法。
答案 0 :(得分:6)
编辑:如果您使用类似TypeScript的内容,则可以进行此类检查。
如果没有字面上检查预期的参数,这在JavaScript中是不可能的(如VoronoiPotato已经显示的那样)。
每个JavaScript函数都可以访问arguments
变量。您可以检查它是否包含任何参数,以及它们是否是您期望的类型。
var foo = func(a, b) {
if(arguments.length < 2 )
Throw("error");
if(typeof a !== '<expectedtype>' && typeof b !== '<expectedtype>')
Throw("error");
};
答案 1 :(得分:5)
我有另一个主意。我在某篇文章中找到了。
创建一个名为 required();
的函数function required(varName) {
throw new Error(`${varName} is required. `);
}
当需要一个参数时,就可以这样使用:
fnName(a=required("a"), b = required("b")){
....
...
}
代码示例:
function required(varName) {
throw new Error(`${varName} is required. `);
}
function sumOfTwoValues(a= required("a"), b = required("b")){
return a+b
}
console.log("sumOfTwoValues(1,2): ", sumOfTwoValues(1,2));
console.log("sumOfTwoValues(1): ", sumOfTwoValues(1));
答案 2 :(得分:4)
function foo(value1, value2){
/**
* @param myParam1 [Required]
* @param myParam2
*/
if(value1 == undefined){
throw('Value1 is a required field for function foo');
}
}
答案 3 :(得分:4)
如果您只关心代码完成位,那么您可以使用JSDoc comments在IntelliJ环境中获取该代码。这不会影响您的代码,因为其他人已经指出,如果参数是可选的,您无法指定JavaScript解释器,但编辑器将从注释中获取信息并在您键入时显示它。这样你自己的功能就像库函数一样显示。
答案 4 :(得分:1)
使用ES6 default function parameters
,您可以实现Required
FLAG,当调用带有必需参数的函数而没有提供这些参数时,它将引发错误并停止执行。
// set a getter to a custom global identifier (P_REQUIRED)
Object.defineProperty( window , 'P_REQUIRED' , {
get : ()=>{
let err = new Error('');
let trace = err.stack.split('\n');
let msg = '';
for(let i=2;i<trace.length;i++) msg+=trace[i]+'\n';
throw 'Error : Missing required parameter\n' + msg;
},
configurable : false
});
// declare a function with a mandatory parameter
function myFunc( myParam = P_REQUIRED ){
/* some code here */
}
// call the function without the parameters
myFunc();
// Error is thrown!
基本上,当在函数调用中未指定任何值时,解释器会将P_REQUIRED
分配给参数。这将触发getter处理程序,该处理程序仅准备并引发新的Error。
这是一个干净的跨浏览器解决方案,可以在任何现代环境中运行(需要ES6)。
我实际上将其打包为javascript模块。
+ info:https://github.com/colxi/P_REQUIRED