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