TypeScript строго типизированный язык программирования, в котором каждая переменная и константа имеет определенный тип.
number — тип для числовых значений;
string — тип для строковых значений;
boolean — тип для булевых значений, принимает в себя true или false;
any — специальный тип, который используется для отключения проверки типа. Будет полезен, когда присеваемое переменой значение, может менять свой тип. Для установки типа используется знак двоеточия, после которого указывается название типа. Пример:
const str: string = "Helo"
const int: number = 48
const isValid: boolean = true
let variable: any = 84
never — тип для переменной, у которой отсутствие значение. Обычно используется в качестве возвращаемого типа функций, которые генерируют или возвращают ошибку. Пример использования типа never:
function throwError(message: string): never {
throw new Error(message)
}
symbol — представляет собой уникальный идентификатор. По спецификации в качестве ключей для свойств объектов могут использоваться только строки или символы. Создаются новые символы с помощью функции “Symbol”
. При его создании символу можно дать описание (имя), в основном использующееся для отладки кода. Это делается передачей строки внутри функции. Символы гарантировано уникальны. Даже если создать символы с одинаковым описанием, они все ровно будут уникальными. Например:
let id1 = Symbol(‘id’);
let id2 = Symbol(‘id’);
console.log(id1 === id2); // false
Символы позволяют создавать скрытые свойства объектов, к которым нельзя нечаянно обратиться и перезаписать их с других частей программы. Например мы работаем с объектом “user”
, который принадлежит к стороннему коду мы хотим добавить идентификатор и используем для этого символьный ключ:
let user = {
name: “Robot”
};
let id = Symbol(‘id’);
user[id] = 1;
Так как объект “user”
принадлежит стороннему коду, то нам не следует добавлять к нему какие либо поля, это не безопасно, но к символу сложно нечаянно обратиться, сторонний код вряд ли его вообще увидит, поэтому в данном случае добавления поля к объекту не вызовет проблем. Если мы ходим использовать символ при литерально объявлении объекта (когда сразу задаем какие то свойства и значения), то тогда нам нужно заключать наш символ в квадратные скобки. Пример:
let user = {
name: “Robot”,
[id]: 123 // просто “id: 123” работать не будет.
};
Исходя из того что символы уникальны, даже если их имена совпадают. Но что, если, мы хотим, наоборот, чтобы символы с одинаковыми именами были одной сущностью. Например, разные части нашего приложения хотят получить доступ к символу “id”, подразумевая именно одно и то же свойство. Для этого существует глобальный реестр символов, мы можем создавать в нем символы и обращаться к ним и каждый раз гарантированно нам будет возвращаться один и тот же символ. Для чтения чтения, или при отсутствии создания символа в реестре используется конструкция Symbol.for(key)
:
let id = Symbol.for(‘id’);
let id2 = Symbol.for(‘id’);
console. log(id1 === id2); // true
Так, же существует множество системных символов, использующихся внутри самого javascript
, которые используются для настройки различных аспектов поведения объектов.
enum — тип для перечисляемых значений. Представляет собой набор логически связанных констант, в качестве значений которых могут выступать как числа, так и строки. В случае, когда идентификаторам констант значение не устанавливается явно, они ассоциируются с числовым значениями, в порядке возрастания, начиная с нуля. Пример использования типа enum:
enum Fruits {
Apple, // 0
Pear = 1, // 1
Banana, // 2
Citrus = "Lemon",
}
array — тип обозначающий массивы. У этого типа есть две формы указания. Пример:
const numberArray: number[] = [1, 2, 3, 4, 5,]
const numberArray2: Array<number> = [1, 2, 3, 4, 5,]
В TypeScript есть конструкция которая позволяет создавать типы, для создания нового типа используется ключевое слово “type”
.
type Login = string
type ID = string | number
const name: login = ‘admin’
const id1: id = ‘123’
const id2: id = 123
null и undefined — Примитивные типы, которые соответствуют значениям null
и undefined
в javascript. Чаще всего используются для определения новых типов. Пример:
type SomeType = string | null | undefined
Но, если нужно прописать пустой тип для функции (если функция ничего не возвращает), то обычно используется void.