TypeScript — это высокоуровневый язык программирования, разработанный корпорацией Microsoft в 2012 году. Язык позиционируется как обратно совместимое расширение языка JavaScript, обогащенное возможностями строгой статической типизации и полноценного объектно-ориентированного программирования. Любая корректная программа, написанная на JavaScript, одновременно является валидной программой на TypeScript. Эта архитектурная особенность позволяет исполнять транслированный код в любом современном веб-браузере или на серверных платформах (например, Node.js), сохраняя все изначальные преимущества экосистемы JavaScript.

История создания

Проект по созданию языка стартовал в Microsoft под руководством выдающегося инженера Андерса Хейлсберга, который ранее приобрел мировую известность как создатель языков Turbo Pascal, Delphi и C#. Главной мотивацией для разработки послужила необходимость устранения архитектурных ограничений JavaScript при создании масштабных корпоративных приложений. Цель заключалась в разработке инструмента, который позволил бы привнести академическую строгость и инструменты статического анализа в гибкую, но склонную к ошибкам среду веб-разработки, не теряя при этом обратной совместимости с существующим кодом.

Парадигмы программирования и архитектура

Архитектурно язык базируется на стандарте ECMAScript 6, заимствуя из него передовые концепции и расширяя их. Благодаря влиянию Андерса Хейлсберга, TypeScript получил исчерпывающую реализацию парадигмы объектно-ориентированного программирования (ООП), сопоставимую по своим возможностям со строгими языками вроде C# или Object Pascal.

Язык предоставляет полноценную поддержку классов, наследования, интерфейсов и модульности. Модульная архитектура обеспечивает глубокую инкапсуляцию классов и функций. Внедрение модулей и строгих интерфейсов значительно повышает скорость разработки крупных проектов, улучшает читаемость исходного кода и упрощает его повторное использование разрозненными командами программистов.

Благодаря абсолютной обратной совместимости, переход проектов с JavaScript на TypeScript может осуществляться поэтапно: разработчики могут постепенно добавлять новые типизированные конструкции в существующую кодовую базу.

Система типов данных

Фундаментальным нововведением TypeScript стала поддержка явного статического назначения типов. Разработчик имеет возможность снабжать переменные, параметры функций и возвращаемые значения строгими аннотациями типов, что позволяет осуществлять статическую проверку их согласования еще на этапе компиляции.

В случае, если тип не указан явно, компилятор задействует встроенный механизм вывода типов, пытаясь определить структуру данных автоматически на основе контекста присваивания. Если компилятору не удается логически вывести тип, переменной назначается специальный универсальный тип (аналог абстрактного значения). Однако использование такого типа нивелирует преимущества статического анализа и может приводить к снижению вычислительной эффективности. При необходимости механизм статической типизации может быть полностью проигнорирован разработчиком, что возвращает язык к классической динамической типизации JavaScript.

Определения и декларации типов могут быть экспортированы в специализированные файлы объявлений. Концептуально эти файлы выполняют роль, аналогичную заголовочным файлам в языке C++: они декларируют интерфейсы и заголовки функций для внешних компонентов. Это позволяет использовать одни и те же строгие типы в различных изолированных сценариях и библиотеках.

Синтаксис и конструкции

Синтаксис языка визуально схож с языками семейства C и классическим JavaScript, однако содержит множество расширенных абстракций. В арсенал TypeScript добавлены следующие конструкции: Полноценные классы и интерфейсы. Перечисляемые типы (enums). Обобщенное программирование (generics), позволяющее создавать компоненты, работающие с различными типами данных. Стрелочный синтаксис для определения анонимных функций. Дополнительные параметры функций, включая параметры по умолчанию. Кортежи для работы со структурированными массивами фиксированной длины.

Пример концептуальной структуры определения класса в TypeScript выглядит традиционно для объектно-ориентированных языков:

class ExampleClass {
    // Внутренние свойства и методы класса
}

Инструментарий и применение

Эталонный транслятор языка (компилятор TSC) написан на самом TypeScript. Его основная задача — компиляция типизированного исходного кода в стандартизированный JavaScript, понятный интерпретаторам браузеров. Дополнительно существует версия клиентского компилятора, способная транслировать код непосредственно во время загрузки веб-страницы.

Язык обладает масштабной инструментальной поддержкой со стороны разработчика. Для интегрированной среды Microsoft Visual Studio 2012 был выпущен специализированный плагин, а начиная с версии Visual Studio 2013 поддержка TypeScript интегрирована в базовую комплектацию среды разработки (на одном уровне с полноценной поддержкой языка C#).

Кроме того, экосистема предоставляет плагины и модули для базовой поддержки синтаксиса в таких популярных текстовых редакторах для программистов, как Vim, Emacs и Atom. Подобная универсальность сделала TypeScript одним из основных индустриальных стандартов для создания сложных клиентских и серверных веб-приложений.

См. также

UML Visual Basic

Смотреть видео