Всем привет! Меня зовут Лихопой Кирилл, я работаю fullstack-разработчиком. Это - уже третья часть руководства по TypeScript для начинающих, в которой мы разберем более сложные темы, такие как классы, модули и интерфейсы. Предыдущие части: Часть 1 - введение и примитивные типы данных Часть 2 - ссылочные типы данныхЧасть 4 - Литералы и дженерикиЧасть 5 - Строгий режим и сужение типов Мы можем определить типы для любых данных, которые будут в классе: Затем мы можем создать массив people , в котором содержаться экземпляры класса Person : Мы можем добавить модификаторы доступа к свойствам класса. TypeScript также предоставляет новый модификатора доступа readonly (мы говорили о нем в прошлой части): Мы можем сделать наш код более лаконичным, если опишем свойства класса следующим образом: Когда мы описываем класс таким образом, свойства назначаются автоматически прямо в конструкторе, спасая нас от их повторного написания. Обратите внимание - когда мы пропускаем модификатор доступа, то по умолчанию свойство будет public. Классы могут наследоваться, так же, как и в обычном JavaScript: Больше о классах вы можете узнать на официальном сайте TypeScript. В JavaScript модули - это просто файлы, которые содержат связанный код. Функционал может быть импортирован и экспортирован между модулями, чтобы сохранять код в организованном виде. TypeScript так же имеет поддержку модулей. Файлы TypeScript будут компилироваться в отдельные JavaScript файлы. Измените следующие параметры в файле tsconfig.json , чтобы добавить поддержку современных экспорта и импорта: (Несмотря на то, что для Node-проекта вам, вероятно, очень хочется добавить "module":"CommonJS" , это не сработает, т.к. Node еще не поддерживает современные экспорт и импорт.) Теперь, добавьте атрибут type="module" в тег скрипта в вашем HTML-файле: Теперь мы можем импортировать и экспортировать файлы с помощью ES6: Обратите внимание: всегда импортируйте файл с разрешением .js, даже если это TypeScript-файл. Интерфейсы объявляются как объекты и выглядят следующим образом: Вы также можете объявлять их как объекты, используя type(псевдоним типа): А еще тип объекта может быть указан анонимно, прямо в параметрах функции: Интерфейсы очень похожи на псевдонимы типов, и во многих случаях вы можете использовать их обоих. Их ключевое различие - псевдонимы нельзя наследовать, а интерфейсы можно. Следующие примеры взяты из документации TypeScript. Наследование интерфейса: Изучение TypeScript - полное руководство для начинающих. Часть 3 - Классы и интерфейсы. типов: Добавление новых полей к существующему интерфейсу: А вот и разница: типы не могут изменены после объявления: Документация TypeScript советует использовать интерфейсы для объявления объектов, если вам не требуется использовать возможности типов. Также в интерфейсе можно указать типы данных для параметров функции и значения, которое она возвращает: У вас мог возникнуть вопрос: почему мы используем интерфейсы вместо классов в примере выше? Во-первых, интерфейсы используются только в TypeScript, не в JavaScript. Это значит, что они не будут скомпилированы, и соответственно не будут раздувать наш JavaScript-файл. А так как классы используются в JavaScript, то они будут скомпилированы. Во-вторых, класс это, по сути своей, фабрика объектов (то есть это “план” того, как должен выглядеть объект), в то время как интерфейсы используются исключительно для проверки типов. Класс может инициализировать свойства и методы, чтобы помочь создавать объекты, а интерфейсы просто описывают, какие свойства должен иметь объект и каких типов они будут. Мы можем указать классу, что он должен содержать определенные свойства и методы путем реализации интерфейса: На этом третья часть цикла подходит к концу, жду вас в следующей статье, в которой будут рассмотрены такие понятия, как литералы, дженерики и еще несколько тем.P.S. Автор искренне извиняется за большой перерыв между второй и третью частями, который связан с огромными переменами в жизни (в т.ч. релокейт в Казахстан)