有没有办法避免将所有参数传递给函数[重复]

Posted

技术标签:

【中文标题】有没有办法避免将所有参数传递给函数[重复]【英文标题】:Is there a way to avoid passing all the parameters to a function [duplicate] 【发布时间】:2020-04-15 07:46:00 【问题描述】:

假设我有这样的事情:

createSettings(a = null, b = null, c = null, d = 50) 

我真的很想避免这样调用我的函数:

createSettings(null, null, null, 60)

我知道一种方法是接受一个对象而不是多个参数:

createSettings(settings) 

然后我会这样称呼它:

createSettings(d: 60)  

但是这种方法的问题是我失去了知道我应该传递给函数的优势!,这意味着函数只说传递一个设置,它没有说设置可以接受a, b, c, d!,这有点重要,因为它可以帮助我理解如何使用函数,而且我的函数通常很复杂,知道要传递什么也很重要。

所以这是我的问题,有没有办法将这两种方法结合起来并具有功能:

createSettings(a = null, b = null, c = null, d = 50) 

然后这样称呼它?:

createSettings(...d: 50)  

非常感谢任何解决方案或建议。

【问题讨论】:

这能回答你的问题吗? Pass object to javascript function JSDoc 或 Typescript 与良好的 IDE 可以为您提供您正在寻找的智能感知 @Saurav 我确定不是 简而言之:没有。避免设计经常需要跳过大多数参数的函数。 为什么堆栈溢出搜索系统这么弱?!,我什至通读了所有建议的问题,但找不到重复的问题... 【参考方案1】:

虽然这些是可选参数,但您的函数仍需要某种标识符才能知道参数的索引,但显然替代方法是使用接口作为参数。 在你的情况下,它会是这样的:

 export interface setting

a?: any;
b?: any;
c?: any;
d?: any;


export function myFunction(params: setting)   



myFunction(a: 2, d: 5)

参考:How to pass optional parameters while omitting some other optional parameters?

【讨论】:

您的解决方案不起作用,至少在 VSCode 中的智能感知不会将 a, b, c, d 显示为 params 的参数 对不起,我已经为你修好了

以上是关于有没有办法避免将所有参数传递给函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA - 将参数参数传递给 Sub

在Python中将多个参数传递给pool.map()函数[重复]

将参数传递给 package.json 中的 npm 脚本 [重复]

如何将传递给我的 bash 脚本的所有参数传递给我的函数? [复制]

如何将参数传递给正则表达式构造函数,并在 String.matchAll 方法中使用 [重复]

将命名参数传递给 Django 模板中的函数