передать параметр по условию в машинописной функции - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть функция, подобная следующей. Я хочу установить некоторое значение на p3, когда a === "add", если a не равно "add", просто используйте значение по умолчанию из функции. как я могу это сделать?

function func(p1: string, p2: string, p3: string = 'value'): void{
  console.log(p1);
  console.log(p2);
  console.log(p3);
};

let a = 'add';
func('a', 'b'); // output: a, b, x
let a = 'mins';
func('a', 'b'); // output: a, b, value
// something like
func('a', 'b', (a === "add")? "x") // output: a, b, value

Ответы [ 4 ]

0 голосов
/ 24 февраля 2020

Вы могли бы немного переписать свою функцию так:

function func(p1: string, p2: string, { p3 = 'value' }): void{
  console.log(p1);
  console.log(p2);
  console.log(p3);
};

, тогда вы можете назвать ее так:

let a = 'add1'

func("a", "b", (a === 'add' ? { p3: 'hallo' } : {}));
0 голосов
/ 24 февраля 2020

Вы можете сделать это так.

func('a', 'b', ((a === "add") ? "x" : undefined));

Но я бы предпочел это вместо этого.

if (a === 'add') func('a', 'b', 'x');
else func('a', 'b')
0 голосов
/ 24 февраля 2020

В последней строке сделайте следующее:

func('a', 'b', (a === "add") ? "x" : undefined) // output: a, b, value

Но это не тот дизайн, который нравится видеть в рабочем коде или в обзоре кода. Лучше оберните это в некоторых if / else так, чтобы другие поняли, что происходит:

if (a === 'add'){
  func('a', 'b','x');
} else {
  func('a', 'b');
}
0 голосов
/ 24 февраля 2020

Согласно документации, вы можете передать undefined в функцию и использовать указанное по умолчанию значение:

В TypeScript мы также можем установить значение, которому будет присвоен параметр если пользователь не предоставляет один, или если пользователь передает неопределенное на своем месте. Они называются инициализированными по умолчанию параметрами. Давайте возьмем предыдущий пример и по умолчанию используем фамилию «Смит».

function buildName(firstName: string, lastName = "Smith") {
    return firstName + " " + lastName;
}

let result1 = buildName("Bob");                  // works correctly now, returns "Bob Smith"
let result2 = buildName("Bob", undefined);       // still works, also returns "Bob Smith"

Ваш пример должен выглядеть следующим образом:

func('a', 'b', (a === "add")? "x" : undefined)

Подробнее здесь

...