Typescript изменил способ написания кода разработчиками для Интернета. Он облегчил жизнь веб-разработчикам, предоставив статическую типизацию в JavaScript и множество функций, которые либо недоступны в JavaScript, либо еще не включены в будущие спецификации ECMAScript. Одной из таких интересных функций является тип данных Tuple.

Что такое кортеж?

Согласно документации Typescript: «Типы кортежей позволяют выразить массив с фиксированным количеством элементов, типы которых известны, но не обязательно должны быть одинаковыми.» Проще говоря, кортеж позволяет хранение нескольких данных разных типов в коллекции. Вы можете определить, какой тип данных может храниться в каждой позиции.

В приведенном ниже примере я объявляю кортеж для хранения строковых и числовых типов данных.

let employee: [string, number] //Declaring tuple

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

employee= ['David', 10] 

Если вы передадите кортежу неверный тип данных, как в приведенном ниже примере, где я передаю логическое значение в строку, компилятор машинописного текста выдаст ошибку.

employee = [true, 10]; //Error: ‘Type ‘true’ is not assignable to type ‘string’’

Управление кортежами

Как указано выше в определении машинописного текста, кортеж — это массив, что означает, что у вас будет доступ ко всем методам массива, которыми вы владеете, например; push, pop, find, indexOf, filter, splice, forEach и многое другое.

Внимание. Хотя кортежи можно рассматривать как пары, значения не сохраняются как пары для каждого индекса, вместо этого каждое значение будет иметь свой собственный индекс. В приведенном ниже коде, чтобы получить доступ к значению «Дэвид» и числу «10», которые я сохранил в кортеже ранее, я буду обращаться к каждому значению так же, как к обычному массиву по их индексу.

console.log(employee[0]); //David
console.log(employee[1]); //10

Следует помнить еще одну уникальную особенность кортежей: при присвоении значений кортежу первые несколько значений должны точно соответствовать определенным типам. Любые значения после этого могут быть вставлены в любом порядке.

Например, после объявления работника типом [строка, число] первые два значения, которые я передаю, должны быть в порядке строки, а затем числа. Любые значения, переданные после этого, могут быть в любом порядке, и это может быть любой из предопределенных объявленных типов кортежей.

let employee: [string, number]; //declaration
employee = ['David', 10]; //Valid
employee.push(77);
employee.push('Eva');
The following would return an error
employee.push(true); //Error: Argument of type 'true' is not //assignable to parameter of type 'string | number'.

Чем кортеж отличается от массива?

Теперь вам должно быть интересно, если кортеж работает как массив и имеет все методы массива, почему я не могу просто использовать массив типа «любой» для выполнения приведенных выше примеров?

Ответ на этот вопрос: да, вы можете, но тогда это позволит вставлять определенные значения, которые вы, возможно, не хотите вставлять в свой массив. Например, если бы мне нужно было выполнить приведенные выше примеры с массивом типа «любой», я бы смог передать в массив любые значения, кроме строки и числа.

employee: Array<any>;
employee.push('David'); //valid
employee.push(23); //valid
employee.push(true); // also valid

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

Случаи применения

Я обнаружил, что использование кортежей очень полезно в следующем:

  • Пара ключ-значение словарь/запись
  • Когда вы хотите, чтобы метод возвращал более одного значения, и не хотите использовать объект.

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

Если вам понравилась эта статья, обязательно нажмите кнопку хлопка и ознакомьтесь с другими моими статьями ниже!