В этом руководстве вы узнаете о типе объединения 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 позволяет хранить значение одного или нескольких типов в переменной.
