如何在javascript中为命名参数传递默认值

问题描述 投票:1回答:3

我在打字稿中有如下使用命名参数的方法

public foo({x, y, z , m , n} : {x:string, y: number, z: number, m?:string, n?:number}) {
}

参数mn将从另一个类似的对象提供

const default = { m : 'M', n :10, o:6 }

现在,我想像下面那样调用foo,并且我希望添加默认参数而不在调用中显式传递它们。>

  foo({x:'x', y: 5, z: 0})

所以我的问题是如何在呼叫前应用default主体中的foo或在调用前以某种方式拦截foo并应用default

public foo({x, y, z , m , n} = {x:string, y: number, z: number, m?:string, n?:number}) {
   // for example how to apply default here

}

为简单起见,请注意,我减少了参数的数量

我也已经知道以下解决方案,我正在寻找更少样板代码的东西

public foo({x, y, z , m , n} = {x:string, y: number, z: number, m?:string, n?:number}) {
   if (!m) {
     m = default.m;
   }
   if (!n) {
     n = default.n;
   }

}

foo({...default, x:'x', y: 5, z: 0 });

我在打字稿中有一种使用命名参数public foo({x,y,z,m,n}的方法,如下所示:{x:string,y:number,z:number,m?:string,n?:number }){}参数m和n将从...

javascript typescript named-parameters
3个回答
0
投票

如何合并和破坏函数内部的对象?


0
投票

对于合并,您需要使用de-structure使用合并。 default分配在这里不起作用。仅当传递值时未定义对象时,默认分配才有效。因此,您需要将默认值与传递的值合并。


0
投票

您可以仅在参数本身中添加默认值,如下所示:

© www.soinside.com 2019 - 2024. All rights reserved.