TypeScript: как вернуть условные типы в функцию с параметром rest? - PullRequest
1 голос
/ 29 мая 2019

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

  • null при наличии неопределенное значение
  • строка при наличии одно число
  • массив строк при наличии несколько чисел

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

Я также пытался написать функциюгде первый параметр был числом, а второй - параметром rest, но он также не работал.

Так выглядит рабочий код прямо сейчас , за исключением правильного условного возврата типов:

import { rem } from "polished";

type UnitValue = number | undefined;

const unit = (...values: UnitValue[]): string | string[] | null => {
  const result: string[] = [];

  values.forEach(value => {
    if (value) {
      result.push(rem(value));
    }
  });

  if (result.length === 1) {
    return result[0];
  }

  if (result.length > 1) {
    return result;
  }

  return null;
};

воссозданный регистр в codesansbox.io -> ссылка

Мне нужна эта функция, чтобы возвращать точно и только эти типы в этих трех случаях:

  • unit(undefined) -> null
  • unit(16) -> string
  • unit(16, 32) -> string[]

1 Ответ

3 голосов
/ 29 мая 2019

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

import { rem } from "polished";

function unit(...values: undefined[]): null;
function unit(...values: [number]): string;
function unit(...values: number[]): string[];
function unit(...values): null | string | string[] {
  const result: string[] = [];

  values.forEach(value => {
    if (value) {
      result.push(rem(value));
    }
  });

  if (result.length === 1) {
    return result[0];
  }

  if (result.length > 1) {
    return result;
  }

  return null;
}

Вы можете проверить на этой игровой площадке .

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