TypeScript
TypeScript | |
---|---|
![]() | |
Класс языка | |
Тип исполнения | компиляция в JavaScript |
Появился в | 1 октября 2012 |
Автор | Майкрософт |
Расширение файлов |
.ts или .tsx |
Выпуск |
|
Испытал влияние | JavaScript, C#, Java и CoffeeScript |
Лицензия | Apache License 2.0[2] |
Сайт | typescriptlang.org (англ.) |
![]() |
TypeScript — язык программирования, представленный Microsoft в 2012 году и позиционируемый как средство разработки веб-приложений, расширяющее возможности JavaScript[3][4][5][6][7][8].
Разработчиком языка TypeScript является Андерс Хейлсберг (англ. Anders Hejlsberg), создавший ранее Turbo Pascal, Delphi и C#.
Спецификации языка открыты и опубликованы в рамках соглашения Open Web Foundation Specification Agreement (OWFa 1.0)[9].
TypeScript является обратно совместимым с JavaScript и компилируется в последний. Фактически, после компиляции программу на TypeScript можно выполнять в любом современном браузере или использовать совместно с серверной платформой Node.js. Код экспериментального компилятора, транслирующего TypeScript в JavaScript, распространяется под лицензией Apache. Его разработка ведётся в публичном репозитории через сервис GitHub[10].
TypeScript отличается от JavaScript возможностью явного статического назначения типов, поддержкой использования полноценных классов (как в традиционных объектно-ориентированных языках), а также поддержкой подключения модулей, что призвано повысить скорость разработки, облегчить читаемость, рефакторинг и повторное использование кода, помочь осуществлять поиск ошибок на этапе разработки и компиляции, и, возможно, ускорить выполнение программ.
Планируется, что в силу полной обратной совместимости адаптация существующих приложений на новый язык программирования может происходить поэтапно, путём постепенного определения типов.
На момент релиза представлены файлы для восприятия расширенного синтаксиса TypeScript для Vim и Emacs, а также плагин для Microsoft Visual Studio.
Одновременно с выходом спецификации разработчики подготовили файлы с декларациями статических типов для некоторых популярных JavaScript-библиотек, среди которых jQuery.
Справка
TypeScript возник из-за предполагаемых недостатков JavaScript в крупномасштабных приложениях как в Microsoft, так и у прочих пользователей JavaScript.[11] Проблемы с разработкой сложных программ на JavaScript привели к необходимости облегчения разработки компонентов языка.[12]
Разработчики TypeScript искали решение, которое не будет нарушать совместимость со стандартом и его кроссплатформенной поддержкой. Зная, что только стандарт ECMAScript предлагает поддержку в будущем для программирования на базе классов (Class-based programming), TypeScript был основан на этом предположении. Это привело к созданию компилятора JavaScript с набором синтаксических языковых расширений, увеличенным на основе предложения, которое трансформирует расширения в JavaScript. В этом смысле TypeScript является представлением того, что ожидать от ECMAScript 6. Уникальный аспект не в предложении, а в добавлении в TypeScript статической типизации, что позволяет статически анализировать язык, облегчая оснастки и IDE поддержку.
Поддержка ECMAScript 6
TypeScript добавляет поддержку следующих функций: классы, модули и синтаксис функции стрелкой (стрелочных функций), как они были предложены в стандарте ECMAScript 6.
Особенности языка
TypeScript это расширение языка ECMAScript 5. Добавлены следующие опции:
- Аннотации типов[англ.]* и проверка их согласования на этапе компиляции[англ.]
- Вывод типов
- Классы
- Интерфейсы
- Перечисляемые типы
- Примесь
- Обобщённое программирование
- Модули[13]
- Сокращенный синтаксис «стрелок» для анонимных функций
- Дополнительные параметры и параметры по умолчанию
- Кортежи
Синтаксически, TypeScript очень похож на JScript .NET, очередную реализацию Microsoft языкового стандарта ECMA-262, обеспечивающего поддержку статической типизации и классических объектно-ориентированных возможностей языка, таких как классы, наследование, интерфейсы и пространства имен.
Совместимость с JavaScript
TypeScript является надстройкой над JavaScript. Таким образом, программа JavaScript также является правильной программой TypeScript, и программы TypeScript могут легко включать JavaScript. TypeScript компилирует ES3-совместимый JavaScript.[14] По умолчанию компилируется ECMAScript 3, как преобладающей стандарт; также есть возможность создавать конструкции, используемые в ECMAScript 5.
С TypeScript можно использовать существующий JavaScript-код, включать популярные библиотеки JavaScript, и вызывать TypeScript-код, сгенерированный из других JavaScript.[14] Объявление типов для этих библиотек поставляются вместе с исходным кодом.
Объявление типов
TypeScript обеспечивает объявления типов для статической проверки их согласования. Это не является обязательным и может быть проигнорировано, чтобы использовать обычную динамическую типизацию JavaScript.
function add(left: number, right: number): number {
return left + right;
}
Существует несколько аннотаций для примитивных типов: number
, boolean
и string
. Слабо или динамически введённые структуры имеют тип any
.
Определения типов могут быть экспортированы в отдельный файл объявлений, чтобы сделать информацию о типах доступной для сценариев TypeScript с использованием различных типов уже скомпилированных в JavaScript. Определения могут быть заявлены к существующей библиотеке JavaScript, как это было сделано для Node.js и JQuery.
Компилятор TypeScript пытается вывести типы, когда они не указаны явно. Например, метод add
в приведенном выше коде будет выводить как возврат в number
, даже если бы не было предусмотрено никакого возврата типа в определении. Это основано на статических типах left
и right
numbers
и познаниях компилятора о том, что результат сложения двух numbers
всегда number
. Тем не менее, прописывание возвращаемого типа позволяет компилятору проверить правильность.
Если тип не может быть выведен из-за отсутствия объявлений, то по умолчанию будет динамический тип any
. Значение типа any
поддерживает те же операции, что и значение в JavaScript и минимальная статическая проверка типов выполняется для операции на any
.[15]
Файлы деклараций
Когда сценарий TypeScript будет скомпилирован, есть опция для создания файла декларации (с расширением .d.ts
), который используется как интерфейс к компонентам в скомпилированном JavaScript. В процессе компилятор удаляет все функции и тела методов и сохраняет только сигнатуры типов, которые экспортируются. Итоговый файл декларации может быть использован для описания экспортируемых виртуальных типов TypeScript библиотеки JavaScript или модуля, когда сторонний разработчик использует их в TypeScript.
Концепция файлов декларации аналогична таковой в заголовочных файлах в C++:
declare module arithmetics {
add(left: number, right: number): number;
subtract(left: number, right: number): number;
multiply(left: number, right: number): number;
divide(left: number, right: number): number;
}
Файлы декларации могут быть написаны вручную как для существующих библиотек JavaScript, так и для jQuery и Node.js.
Большая коллекция файлов деклараций для популярных библиотек JavaScript размещена на GitHub borisyankov в его репозитории DefinitelyTyped.
Классы
TypeScript поддерживает классы ECMAScript 6, что позволяет поддерживать опцию объявления типов.
class Person {
private name: string;
private age: number;
private salary: number;
constructor(name: string, age: number, salary: number) {
this.name = name;
this.age = age;
this.salary = salary;
}
toString(): string {
return this.name + " (" + this.age + ")" + "(" + this.salary + ")";
}
}
Шаблоны
TypeScript поддерживает обобщённое программирование.[16]
Модули
Используя модули, TypeScript поддерживает инкапсуляцию классов, интерфейсов, функций и переменных в пространствах имен. TypeScript различает внутренние и внешние модули. Внутренние модули на основе синтаксиса модуля из ECMAScript 6, тогда как внешние модули используют библиотеку JavaScript (AMD или CommonJS).[17]
Инструменты разработчика
Компилятор
Компилятор TypeScript называется tsc
– он написан на языке TypeScript, может быть скомпилирован в стандартный JavaScript, а после этого запущен на любом движке JavaScript (например в браузере). Компилятор идет вместе с сервером сценариев, который может запускать компилятор. Также он доступен в виде пакета для node.js
, который использует node.js
в качестве сервера.
Также существует альфа-версия клиентского компилятора в JavaScript, который выполняет TypeScript на лету, во время загрузки страницы.
Текущая версия компилятора использует по умолчанию ECMAScript версии 5. Но есть возможность использовать и ECMAScript 2015, чтобы иметь доступ к уникальным языковым возможностям этой версии, например к генераторам. Классы, за исключением тех, которые явно описаны в стандарте ECMAScript 2015, доступны в обеих версиях.
IDE и поддержка редакторов
- Существует плагин от Microsoft для Visual Studio 2012 и для WebMatrix, а в версиях Visual Studio 2013, Visual Studio 2015 реализована полная поддержка на уровне IDE.
- Есть базовая поддержка в текстовых редакторах Sublime Text, Emacs и Vim.
- Visual Studio Code
- JetBrains поддерживает TypeScript, включая компиляцию, рефакторинг и отладку в IDE на платформе IntelliJ, например, PhpStorm 6, WebStorm 6, и IntelliJ IDEA, а также в их расширении для Visual Studio ReSharper 8.1.
- У Atom есть плагин для TypeScript, разработанный Basarat с поддержкой автодополнения, навигации по коду, форматирования и быстрой компиляции.
- Онлайн-среда Cloud9, Codenvy, CodePen и другие также поддерживают TypeScript.
- Плагин для NetBeans IDE.
- Плагин для Eclipse IDE (версия Kepler)
- TypEcs также доступен для Eclipse IDE.
- Существует плагин от Microsoft для редактора Sublime Text.
- Кроссплатформенная IDE Codeanywhere также поддерживает TypeScript.
См. также
Примечания
- ↑ Release v5.8.2
- ↑ The typescript Open Source Project on Open Hub: Licenses Page — 2006.
- ↑ Microsoft takes the wraps off TypeScript, a superset of JavaScript
- ↑ TypeScript: JavaScript Development at Application Scale
- ↑ Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript?
- ↑ Microsoft Augments Javascript for Large-scale Development
- ↑ Microsoft анонсировала новый язык веб-программирования TypeScript . Дата обращения: 2 октября 2012. Архивировано из оригинала 31 мая 2017 года.
- ↑ Компания Microsoft представила TypeScript, новую открытую альтернативу JavaScript
- ↑ Open Web Foundation Final Specification Agreement (OWFa 1.0)
- ↑ Проект TypeScript на сайте GitHub
- ↑ Anders Hejlsberg. What is TypeScript and why with Anders Hejlsberg . www.hanselminutes.com (5 октября 2012). Дата обращения: 15 января 2014.
- ↑ S. Somasegar. TypeScript: JavaScript Development at Application Scale . msdn.com (1 октября 2012). Дата обращения: 27 ноября 2013.
- ↑ Klint Finley. Microsoft Previews New JavaScript-Like Programming Language TypeScript . TechCrunch (1 октября 2012). Дата обращения: 27 ноября 2013.
- ↑ 1 2 Official TypeScript Home Page
- ↑ TypeScript Language Specification p.24 Архивировано 17 ноября 2013 года.
- ↑ Jonathan Turner. Announcing TypeScript 0.9 . msdn.com (18 июня 2013). Дата обращения: 27 ноября 2013.
- ↑ Sönke Sothmann. An introduction to TypeScript’s module system . blog.oio.de (31 января 2014). Дата обращения: 21 февраля 2014.
Литература
- Steve Fenton. TypeScript Succinctly. — Syncfusion Ink., 2014.
- Nathan Rozentals. Mastering TypeScript - Build enterprise-ready, industrial strength web applications using TypeScript and leading JavaScript Frameworks. — Packt Publishing, 2015. — ISBN 9781784399665.
- Steve Fenton. Pro TypeScript: Application-Scale JavaScript Development. — Apress, 2014. — ISBN 978-1-4302-6791-1.
- Dan Maharry. TypeScript revealed. — Apress, 2013. — ISBN 9781430257257.
Ссылки
- Официальный сайт языка программирования TypeScript.
- CATS (Code Assistant for TypeScript) — Интегрированная среда разработки для TypeScript.
- github — Исходный код
![]() | Для улучшения этой статьи желательно: |
- Языки программирования по алфавиту
- Языки программирования, появившиеся в 2012 году
- Свободное и открытое программное обеспечение Microsoft
- Семейство языков программирования JavaScript
- Скриптовые языки
- Кроссплатформенное программное обеспечение
- Программное обеспечение Microsoft
- Программное обеспечение с лицензией Apache Software License
- Транспиляция