Тип union в TypeScript

В этом руководстве вы узнаете о типе объединения union в TypeScript, который позволяет хранить значение одного или нескольких типов в переменной.

Введение в тип объединения TypeScript

Иногда вы столкнетесь с функцией, которая ожидает параметр, который является либо числом, либо строкой. Например:

function add(a: any, b: any) {
    if(typeof a === 'number' && typeof b === 'number') {
        return a + b;
    }
    if(typeof a === 'string' && typeof b === 'string') {
        return a.concat(b);
    }
    throw new Error('Parameters must be numbers or strings');
}

В этом примере функция add() будет вычислять сумму своих параметров, если они являются числами.

  • Если параметры являются строками, функция add() поместит их в одну строку.
  • Если параметры не являются ни числами, ни строками, функция add() выдает ошибку.

Проблема с параметрами функции add() заключается в том, что ее параметры имеют тип any. Это означает, что вы можете вызывать функцию с аргументами, которые не являются ни числами, ни строками, TypeScript с этим справится.

Этот код будет успешно скомпилирован, но вызовет ошибку во время выполнения:

add(true, false);

Чтобы решить эту проблему, вы можете использовать тип объединения TypeScript. Тип union позволяет объединять несколько типов в один тип.

Например, следующая переменная имеет тип number или string :

let result: number | string;
result = 10; // OK
result = 'Hi'; // also OK
result = false; // a boolean value, not OK

Тип union описывает значение, которое может быть одним из нескольких типов, а не только двумя. Например number | string | boolean — это тип значения, которое может быть числом, строкой или логическим значением.

Вернемся к примеру с функцией add() Вы можете изменить типы параметров с any на union следующим образом:

function add(a: number | string, b: number | string) {
    if(typeof a === 'number' && typeof b === 'number') {
        return a + b;
    }
    if(typeof a === 'string' && typeof b === 'string') {
        return a.concat(b);
    }
    throw new Error('Parameters must be numbers or strings');
}

Тип объединения TypeScript позволяет хранить значение одного или нескольких типов в переменной.

Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript