Typescript — это скриптовый язык, компилируемый в JavaScript. Разработка Microsoft, которая, на сегодняшний день, успела завоевать и фанатов и недоброжелателей.
В TypeScript типизация статическая, что избавляет от множества проблем. Есть числовой тип, строковый, логический и другие. Возможно описывать и свои типы данных, например, с помощью enum
И в JS, и в TS есть поддержка объектно-ориентированного программирования: классы, объекты, наследование. Однако TypeScript шагнул чуть дальше и использует больше возможностей ОПП. В том числе, например, интерфейсы:
interface IPost {
id: number;
text: string;
}
class Message implements IPost {
id: number;
text: string;
senderId: number;
recieverId: number;
}
Другой большой плюс — модификаторы доступа. Их в TypeScript три: public, private и protected.class User { //Приватные члены класса, которые недоступны извне private id: number; private login: number; }
Также есть и другие возможности:
– определение полей в конструкторе;
– преобразование типов;
– абстрактные классы;
– обобщение и так далее.
Рассказать про следующие виды типизации, их особенности, плюсы и минусы:
слабая / сильная
Сильная типизация выделяется тем, что язык не позволяет смешивать в выражениях различные типы и не выполняет автоматические неявные преобразования, например нельзя вычесть из строки множество. Языки со слабой типизацией выполняют множество неявных преобразований автоматически, даже если может произойти потеря точности или преобразование неоднозначно.
статическая / динамическая
Статическая определяется тем, что конечные типы переменных и функций устанавливаются на этапе компиляции. Т.е. уже компилятор на 100% уверен, какой тип где находится. В динамической типизации все типы выясняются уже во время выполнения программы.
явная / неявная
Явно-типизированные языки отличаются тем, что тип новых переменных / функций / их аргументов нужно задавать явно. Соответственно языки с неявной типизацией перекладывают эту задачу на компилятор / интерпретатор.
структурная / номинативная
В отличие от номинативной, которая следит за названиями типов, структурная типизация принимает решение о совместимости типов на основе их содержимого.