Найти тему
jsbook.ru

Typescript: кортежи

Иногда нам нравится хранить значения в массиве с определенными типами. Использование типа any может, конечно, решить эту проблему, но также разрешит определенные типы, которые нам могут не понадобиться. Это где кортежи приходят.

Скажем мы хотим создать массив пользователь к котором будут хранится его имя и идинтификационый номер:

Указав для нашего пользователя тип any, мы можем использовать в нашем массиве данные любого типа, и это противоречит нашей цели иметь userId, который является числом, и userName, который является строкой. Мы можем использовать кортеж для решения этой проблемы:

-2

Мы определяем кортеж, помещая наши предполагаемые типы в квадратные скобки и разделяя их запятыми, в данном случае числом и строкой. Теперь, если мы передадим тип, который не определен в кортеже, скажем, логическое значение, мы получим сообщение об ошибке:

Type ‘true’ is not assignable to type ‘string’.

Данная ошибка возникает так как мы указали что вторым элементом в нашем кортеже должна быть строка, но мы передали булево значение.

Доступ к элементам в кортеже

Для доступа к элементам в кортеже мы используем индексы так же как и в массиве ( по факту он массивом и является т.к отдельного типа кортеж в ts нету ):

-3

Кортежи крайне полезны когда нам нужно создать структуру данных по типу словарь или пара ( ключ-значение ).

Используя пример выше, мы можем создать массив кортежей ( userId, userName ), при этом мы будем защищены от вероятности передачи данных неверного типа.

При назначении значений кортежу первые два значения должны точно соответствовать типам, определенным в кортеже.
При назначении значений кортежу первые два значения должны точно соответствовать типам, определенным в кортеже.

Например в примере выше, первым элементом должно быть значение типа число, а вторым значение типа строка. Если мы попытаемся поменять значения местами то мы получим ошибку.

-5

Код выше явлется неверным, т.к первным должно быть число, вторым же должна быть строка, а не наоборот.

Любое последующее значение, которое мы добавляем в кортеж, может быть любым из предопределенных типов в произвольном порядке.
Любое последующее значение, которое мы добавляем в кортеж, может быть любым из предопределенных типов в произвольном порядке.

В приведенном выше коде, поскольку кортеж был объявлен с числом и строкой, мы можем вводить элемент из строки или числа в произвольном порядке, если они не являются первыми двумя элементами. Мы все еще не можем присвоить логическое значение элементу, потому что кортеж не был объявлен с логическим типом.