Более простой способ вызвать функцию со многими параметрами? - PullRequest
0 голосов
/ 08 ноября 2018

например, я получил следующую функцию в Javascript / Typescript (реальная - это сгенерированный REST Api из OpenApiGenerator)

doStuffAsGet(a: string, b: string; c: string; d: string, e: string, ...)

Теперь я бы вызывал функцию только с параметром c, остальное должно быть неопределенным. Есть ли способ не писать много-много неопределенных только для того, чтобы предоставить этот параметр?

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Параметры покоя, деконструкция ... Все в следующем примере:

Что нужно знать:

  • void 0 равно undefined
  • ... - оператор распространения
  • [,,c] называется деконструкцией

function doStuffAsGet(...args) {
  const [, , c] = args;

  console.log(args[2], c);
}

// Way to call #1
doStuffAsGet('a', 'b', 'c', 'd', 'e');

// Way to call #2
doStuffAsGet(void 0, void 0, 'c', void 0, void 0, void 0);

// Way to call #3
doStuffAsGet(void 0, void 0, 'c');

// Way to call #4
const args = [];

for (let i = 0; i < 2; i += 1) {
  args.push(void 0);
}

doStuffAsGet(...args, 'c');

// Way to call #5
doStuffAsGet(...[0, 1].map(() => void 0), 'c');


Как сказал @Nikhil Aggarwal в комментарии, вы также можете превратить args в объект, который будет намного проще в использовании и обслуживании, например:

function doStuffAsGet({
  a,
  b,
  c,
  d,
}) {
  console.log(c);
}

function doStuffAsGetAlternative(obj) {
  console.log(obj.c);
}

// Way to call #1
doStuffAsGet({
  c: 'hi',
});

// Way to call #1
doStuffAsGet({
  a: 'salut',
  c: 'hi',
  d: 'buenos dias',
});
0 голосов
/ 08 ноября 2018

Я бы попробовал использовать операторы отдыха и распространения, я не знаю цели этой функции, поэтому не могу вам помочь, но проверьте это

https://javascript.info/rest-parameters-spread-operator

0 голосов
/ 08 ноября 2018

Необязательные параметры - используйте суффикс имени ?, чтобы сделать параметр необязательным:

function doStuffAsGet(a: string, b: string, c: string, d?: string, e?: string) {

}

doStuffAsGet('a', 'b', 'c');
doStuffAsGet('a', 'b', 'c', 'd');
doStuffAsGet('a', 'b', 'c', 'd', 'e');

Вы можете сделать a, b и c обязательными, но оставьте все необязательные (вы выбираете, что вы должны иметь, используя ? в зависимости от ситуации).

Вы также можете использовать значения по умолчанию - укажите значение по умолчанию с помощью оператора =:

function doStuffAsGet(a: string, b: string, c: string, d: string = '', e: string = '') {

}

doStuffAsGet('a', 'b', 'c');
doStuffAsGet('a', 'b', 'c', 'd');
doStuffAsGet('a', 'b', 'c', 'd', 'e');

И остальные параметры, где используется префикс имени .... Это собирает все последующие аргументы в массив.

function doStuffAsGet(a: string, ...others: string[]) {

}

doStuffAsGet('a', 'b', 'c');
doStuffAsGet('a', 'b', 'c', 'd');
doStuffAsGet('a', 'b', 'c', 'd', 'e');
doStuffAsGet('a', 'b', 'c', 'd', 'e', 'f');

Обратите внимание, что в приведенном выше примере необходимо a, поэтому нельзя вызывать функцию с нулевыми аргументами. Опять же, вы выбираете, что нужно, а что нет.

Их комбинация может дать вам то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...