Typescript Используйте параметр компилятора --downlevelIteration, чтобы разрешить итерацию ошибок итераторов при попытке распространения - PullRequest
0 голосов
/ 17 июня 2020

У меня есть функция, которая имеет аргумент типа object или array.

const handleScenarioChange = (scenario: Scenario | Scenario[]) => {
  if (isArray(scenario)) {
    const scenarios = [...state.selectedScenarios, ...scenario];
    const uniqueScenarios = removeDuplicateScenarios(scenarios);
    setState({ selectedScenarios: sortBy(uniqueScenarios, ['Name']) });
  } else {
    // If scenario is not an array, that means this is adding tag
    const scenarios = [...state.selectedScenarios, scenario];
    const uniqueScenarios = removeDuplicateScenarios(scenarios);
    setState({ selectedScenarios: sortBy(uniqueScenarios, ['Name']) });
  }
};

Как видите, я создаю uniqueScenar ios и снова устанавливаю состояние в блоке if и else . Однако я хочу использовать тернарный оператор, чтобы сделать то же самое.

Я пробовал

    const scenarios = [...state.selectedScenarios, ...(isArray(scenario)) ? ...scenario : scenario];
    const uniqueScenarios = removeDuplicateScenarios(scenarios);
    setState({ selectedScenarios: sortBy(uniqueScenarios, ['Name']) });

My compilerOptions.target в моем tsconfig. json is es5. Я поменял его на es6, но все равно не работает. Пожалуйста, посоветуйте.

Ссылка на Stackblitz: URL

1 Ответ

0 голосов
/ 17 июня 2020

Ваш первый фрагмент должен работать без ошибок, но ваш второй фрагмент имеет недопустимый синтаксис:

const scenarios = [
  ...state.selectedScenarios,
  ...(isArray(scenario)) ? ...scenario : scenario
];

Здесь слишком много ... разворотов. Распространение с скобками будет распространять массив, который является значением выражения в скобках. Это означает, что паренсы должны разрешаться в массив.

[...(expression().thatReturns().anArray)]

Итак, чтобы эта троичная работа работала, вам нужно убедиться, что она всегда возвращает массив, либо возвращая исходный массив, либо или заключив регистр одного элемента в массив:

  const scenarios = [
    ...selectedScenarios,
    ...(Array.isArray(scenario) ? scenario : [scenario])
  ];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...