Примитивные типы Number, String, Boolean, Symbol, BigInt¶
Преобразования TypeScript не затронули ни один из перечисленных в заголовке тип. Но несмотря на это, их упоминание необходимо, поскольку их отсутствие сделало бы картину менее точной.
Важно¶
Помимо того, что система типов TypeScript включает в себя все существующие в JavaScript типы данных, некоторые из них подверглись более очевидному уточнению.
Типы данных, чьи идентификаторы начинаются с прописной буквы (Type), представляют собой объектные типы (ссылочные типы), описывающие одноимённые типы из JavaScript (Number, String, Boolean и т.д.). Проще говоря, типы, знакомые по JavaScript и начинающиеся с большой буквы, представляют собой конструкторы. В TypeScript подобные типы описаны с помощью глобальных интерфейсов (interface) и помимо того, что их можно расширять (extends) и реализовывать (implements), их также можно указывать в аннотации типа. Но сразу стоит сделать акцент на том, что указывать их в аннотации следует только тогда, когда подразумевается именно конструктор. Для остальных случаев существуют типы, идентификаторы которых начинаются со строчной буквы (type). Имена типов, начинающихся с маленькой буквы, являются зарезервированными ключевыми словами и представляют литералы примитивных значений, то есть непосредственно числа, строки и другие значения. Данные типы предназначены для указания в аннотациях, а не для использования в механизмах, как, например, наследование или расширение.
Number примитивный числовой тип¶
В TypeScript, как и в JavaScript, все производные от number являются 64-битными числами двойной точности с плавающей запятой.
Помимо того, что в TypeScript существует тип Number, представляющий собой конструктор одноименного типа из JavaScript, также существует тип number, представляющий собой примитивные значения числовых литералов.
1 2 | |
Напомню, что числа могут записываться в двоичной, восьмеричной, десятичной, шестнадцатеричной системе счисления.
1 2 3 4 | |
Помимо этого тип number неявно преобразуется в тип Number, но не наоборот.
1 2 3 4 5 | |
В случаях, когда тип не указан явно, а в качестве значения ожидается результат вызова конструктора, вывод типов определяет принадлежность к типу конструктора, только если конструктор был вызван при помощи оператора new.
1 2 | |
В TypeScript поведение типа Number идентично поведению одноимённого типа в JavaScript.
String примитивный строковый тип¶
Примитивный тип String представляет собой последовательность символов в кодировке Unicode UTF-16. Строки могут быть заключены в одинарные или двойные кавычки, а также в обратные апострофы (инициаторы так называемых шаблонных строк).
Помимо того, что в TypeScript существует тип String, описывающий одноименный конструктор из JavaScript, также существует тип string, представляющий собой примитивные значения строковых литералов.
1 2 3 4 | |
Тип string неявно преобразуется в тип String, но не наоборот.
1 2 3 4 5 | |
И, кроме этого, вывод типов выводит принадлежность к типу конструктора, только если он был вызван с помощью оператора new.
1 2 | |
В TypeScript поведение типа String идентично поведению одноимённого типа в JavaScript.
Boolean примитивный логический тип¶
Примитивный тип Boolean является логическим типом и представлен значениями "истина" true и "ложь" false.
Помимо того, что в TypeScript существует тип Boolean, представляющий собой одноименный конструктор из JavaScript, также существует тип boolean, представляющий собой примитивные значения логических литералов.
1 2 | |
Тип boolean неявно преобразуется в тип Boolean, что делает его совместимым с ним, но не наоборот.
1 2 3 4 5 | |
И, кроме этого, вывод типов выводит принадлежность к типу конструктора, только если он был вызван с помощью оператора new.
1 2 | |
В TypeScript поведение типа Boolean идентично поведению одноимённого типа в JavaScript.
Symbol примитивный символьный тип¶
Примитивный тип Symbol предоставляет уникальные идентификаторы, которые при желании могут использоваться в качестве индексируемых членов объекта.
Помимо того, что в TypeScript существует тип Symbol, описывающий одноименный конструктор из JavaScript, также существует тип symbol, представляющий собой примитивные значения литералов.
1 2 | |
Тип symbol неявно преобразуется в тип Symbol, что делает его совместимым с ним, но не наоборот.
1 2 3 4 5 | |
Поскольку конструктор Symbol нельзя вызвать с помощью оператора new, вывод типов всегда будет определять принадлежность к типу symbol. И, кроме этого, вывод типов выводит принадлежность к типу конструктора, только если он был вызван с помощью оператора new.
1 | |
Тип symbol предназначен для аннотирования символьных литералов. В TypeScript поведение типа Symbol идентично поведению одноимённого типа в JavaScript.
BigInt примитивный числовой тип¶
BigInt — примитивный числовой тип, позволяющий безопасно работать с числами произвольной точности, в том числе значениями, выходящими за пределы, установленные типом Number. Примитивный тип BigInt указывается с помощью ключевого слова bigint.
1 2 | |
Но стоит заметить, что на данный момент (конец 2018 года) из-за плохой поддержки типа BigInt TypeScript позволяет работать с ним лишь при установленной опции компилятора --target в значение ESNext.
Тип bigint предназначен для аннотирования числовых значений с произвольной точностью. В TypeScript поведение типа BigInt идентично поведению одноимённого типа в JavaScript.