Простые типы
Объявление переменной с определенным типом
Начнем изучение TypeScript с самых простых конструкций. Если вы хотите объявить переменную, в которую можно будет записать любое число (но при этом только число), вам нужно воспользоваться встроенным типом number
. Это будет выглядеть следующим образом:
Это очень похоже на то, как объявляется переменная в JavaScript:
Только добавляется описание типа переменной. Делается это при помощи двоеточия (:
) и названия типа (number
). Если попытаться присвоить переменной с типом number
значение другого типа (например, строки), TypeScript выдаст ошибку во время компиляции:
number
, string
и boolean
number
, string
и boolean
Рассмотри следующие два примитивных типа: 1. string
- позволяет присваивать любую строку 2. boolean
- позволяет присваивать любое логическое значение (true
или false
)
По аналогии с примером для number
, если мы попытаемся присвоить значение, которое не совместимо с типом, компилятор TypeScript выдаст ошибку.
Массивы
Существует несколько способов, как указать на то, что мы хотим записывать в переменную массив каких-то значений. Первый способ -использовать постфикс []
после объявления типа элементов массива.
Второй способ - использовать интерфейс Array
и передать ему в качестве generic-параметра тип элементов.
Что такое интерфейс и generic-параметры мы рассмотрим позже. Сейчас важно понимать, что тип для массива можно объявить двумя разными способами и что эти два способа эквивалентны.
Мы в основном будем пользоваться первым способом.
Все описанные правила для массива применимы не только для number
, но и для других типов (например, рассмотренные нами string
и boolean
).
Рассмотрим несколько важных особенностей массивов:
Если хотя бы один элемент присваиваемого массива не соответствует типу элементов массива, то TypeScript выдаст ошибку во время компиляции.
Присвоить пустой массив можно любому типу-массиву.
Тип-массив, помимо ограничений на типы элементов этого массива, также определят свойство
length
. Свойствоlength
имеет типnumber
и хранит количество элементов в этом массиве.
Кортеж (Tuple)
Кортеж - это особый вид массива. Он позволяет строго задать количество элементов массива, а также тип каждого элемента. Например.
В данном примере мы объявили переменную, которой можно присвоить массив только с одним элементом и тип этого элемента должен быть числом. Все следующие примеры содержат ошибку.
В кортеже можно указать типы для нескольких элементов. Причем типы элементов могут быть любые, включая массивы, вложенные кортежи и типы, которые мы рассмотрим далее.
null
и undefined
null
и undefined
Без дополнительных настроек значения null
и undefined
можно присваивать переменным любого типа.
Однако, можно типизировать переменные типами null
и undefined
. Таким переменным можно присваивать только два этих типа (почти, но об это в следующей серии).
Автоматический вывод типов
TypeScript автоматически определят тип литерала. При использовании оператора присваивания (=
) TypeScirpt проверяет соответствие типа правого и левого операнда. Если типы не совместимы, то возникает ошибка компиляции.
Но, если тип с левой стороны оператора присваивания не указан, то срабатывает автоматический вывод типа: тип правой стороны присваивается левой стороне вместе со значением. Важно понимать, что правый операнд может быть сложным выражением.
У механизма автоматического вывода типов есть ряд особенностей. Одна из таких особенностей - различие между массивом и кортежем. Дело в том, что выражение [1, 2, 3]
имеет тип number[]
, а не [number, number, number]
. Соответственно автоматический вывод типов присвоит левой части тип number[]
. Если мы хотим, чтобы переменная слева была кортежем - нужно явно указывать тип.
Однако обратная операция всегда выполнима - значение с типом [number, number]
всегда можно присвоить в переменную с типом number[]
.
P.S.
В это части мы задели несколько примитивных концепций TypeScript. Однако некоторые вещи, описанные выше, не полностью раскрыты и даже слегка некорректны. Особенно это касается автоматического вывода типов. Нет, TypeScript действительно умеет выводить типы. Некорректность заключается в том, что типы некоторых выражений указаны не совсем точно. Почему они не совсем точные и какие типы должны быть на самом деле, а также почему любому числовому массиву соответствует любой корте из чисел, но не наоборот - поговорим об этом в следующей части.
Задания
Last updated
Was this helpful?