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
Преимущество кортежа в том, что он позволяет хранить в массиве несколько типов данных, а также устанавливать ограничения.
Случаи применения
Я обнаружил, что использование кортежей очень полезно в следующем:
- Пара ключ-значение словарь/запись
- Когда вы хотите, чтобы метод возвращал более одного значения, и не хотите использовать объект.
Добавьте в разделе комментариев области, в которых, по вашему мнению, использование кортежей было лучшим вариантом.
Если вам понравилась эта статья, обязательно нажмите кнопку хлопка и ознакомьтесь с другими моими статьями ниже!