​Что такое TypeScript

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% уверен, какой тип где находится. В динамической типизации все типы выясняются уже во время выполнения программы.

явная / неявная
Явно-типизированные языки отличаются тем, что тип новых переменных / функций / их аргументов нужно задавать явно. Соответственно языки с неявной типизацией перекладывают эту задачу на компилятор / интерпретатор.

структурная / номинативная
В отличие от номинативной, которая следит за названиями типов, структурная типизация принимает решение о совместимости типов на основе их содержимого.