Иногда нам нравится хранить значения в массиве с определенными типами. Использование типа any может, конечно, решить эту проблему, но также разрешит определенные типы, которые нам могут не понадобиться. Это где кортежи приходят.
Скажем мы хотим создать массив пользователь к котором будут хранится его имя и идинтификационый номер:
Указав для нашего пользователя тип any, мы можем использовать в нашем массиве данные любого типа, и это противоречит нашей цели иметь userId, который является числом, и userName, который является строкой. Мы можем использовать кортеж для решения этой проблемы:
Мы определяем кортеж, помещая наши предполагаемые типы в квадратные скобки и разделяя их запятыми, в данном случае числом и строкой. Теперь, если мы передадим тип, который не определен в кортеже, скажем, логическое значение, мы получим сообщение об ошибке:
Type ‘true’ is not assignable to type ‘string’.
Данная ошибка возникает так как мы указали что вторым элементом в нашем кортеже должна быть строка, но мы передали булево значение.
Доступ к элементам в кортеже
Для доступа к элементам в кортеже мы используем индексы так же как и в массиве ( по факту он массивом и является т.к отдельного типа кортеж в ts нету ):
Кортежи крайне полезны когда нам нужно создать структуру данных по типу словарь или пара ( ключ-значение ).
Используя пример выше, мы можем создать массив кортежей ( userId, userName ), при этом мы будем защищены от вероятности передачи данных неверного типа.
Например в примере выше, первым элементом должно быть значение типа число, а вторым значение типа строка. Если мы попытаемся поменять значения местами то мы получим ошибку.
Код выше явлется неверным, т.к первным должно быть число, вторым же должна быть строка, а не наоборот.
В приведенном выше коде, поскольку кортеж был объявлен с числом и строкой, мы можем вводить элемент из строки или числа в произвольном порядке, если они не являются первыми двумя элементами. Мы все еще не можем присвоить логическое значение элементу, потому что кортеж не был объявлен с логическим типом.