TypeScript
| TypeScript | |
|---|---|
| Класс языка | |
| Тип исполнения | транспиляция вJavaScript |
| Появился в | 1 октября2012 |
| Автор | Microsoft |
| Разработчик | Microsoft |
| Расширение файлов | .ts или.tsx |
| Выпуск | |
| Испытал влияние | JavaScript, C#, Java и CoffeeScript |
| Лицензия | Apache License 2.0[2] |
| Сайт | typescriptlang.org (англ.) |
TypeScript —язык программирования, представленныйMicrosoft в2012 году и позиционируемый как инструмент, расширяющий возможностиJavaScript[3][4][5][6][7][8].
Разработчиком языка TypeScript являетсяАндерс Хейлсберг, создавший ранее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 привели к необходимости облегчения разработки компонентов языка[4].
Разработчики TypeScript искали решение, которое не будет нарушать совместимости со стандартом и его кроссплатформенной поддержкой. Зная, что только стандарт ECMAScript предлагает поддержку в будущем для программирования на базе классов (Class-based programming), они основали TypeScript на этом предположении. Это привело к созданию компилятора JavaScript с набором синтаксических языковых расширений, увеличенным на основе предложения, которое трансформирует расширения в JavaScript. В этом смысле TypeScript является представлением того, что ожидать от ECMAScript 6. Уникальный аспект не в предложении, а в добавлении в TypeScriptстатической типизации, что позволяет статически анализировать язык, облегчая оснастки и IDE-поддержку.
Поддержка ECMAScript 6
[править |править код]TypeScript добавляет из стандарта ECMAScript 6 поддержку следующих конструкций: классов, модулей и синтаксиса стрелочных функций.
Примеры кода
[править |править код]Генераторпсевдослучайных паролей с использованием модуля «crypto», встроенного вNode.js:
import*ascryptofrom"crypto";functiongenerate(length:number=16):string{constuppercase:string="ABCDEFGHIJKLMNOPQRSTUVWXYZ";constlowercase:string="abcdefghijklmnopqrstuvwxyz";constnumbers:string="0123456789";constsymbols:string="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";constall:string=uppercase+lowercase+numbers+symbols;letpassword:string="";for(letindex:number=0;index<length;index++){constrandomNumber:number=crypto.randomInt(all.length);password+=all.charAt(randomNumber);}returnpassword;}
Особенности языка
[править |править код]TypeScript — это расширение спецификацииECMAScript 5. Добавлены следующие опции:
- аннотации типов ипроверка их согласованияна этапе компиляции[англ.];
- вывод типов;
- классы;
- интерфейсы;
- перечисляемые типы;
- примесь;
- обобщённое программирование;
- модули[12];
- сокращённый синтаксис «стрелок» дляанонимных функций;
- дополнительные параметры и параметры по умолчанию;
- кортежи.
Синтаксически TypeScript очень похож наJScript .NET, очередную реализацию Microsoft языкового стандарта ECMA-262, обеспечивающего поддержку статической типизации и классических объектно-ориентированных возможностей языка, таких как классы, наследование, интерфейсы и пространства имен.
Совместимость с JavaScript
[править |править код]TypeScript является обратно совместимым с JavaScript. Таким образом, любой код на JavaScript также правилен для TypeScript. В TypeScript можно использовать существующий код на JS и подключать популярные библиотеки JavaScript[13]. Объявление типов для этих библиотек зачастую поставляется вместе с ними либо же может быть написано вручную.
По умолчанию TypeScript компилируется в совместимый с ES3 JavaScript[13] как преобладающий стандарт. С помощью параметра --target или его сокращенной версии -t можно задать версию стандарта JavaScript, в которую будет компилироваться код TypeScript. Этот параметр может принимать следующие значения: ES3 (по умолчанию), ES5, ES6 / ES2015, ES7 / ES2016, ES2017, ES2018, ES2019, ES2020 или ESNext:
tscapp.ts-tES5
Объявление типов
[править |править код]TypeScript обеспечиваетобъявления типов длястатической проверки их согласования. Это не является обязательным и может быть проигнорировано, чтобы использовать обычнуюдинамическую типизацию JavaScript.
functionadd(left:number,right:number):number{returnleft+right;}
Существует несколько аннотаций для примитивных типов:number,boolean иstring. Слабо или динамически введённые структуры имеют типany.
Определения типов могут быть экспортированы в отдельныйфайл объявлений, чтобы сделать информацию о типах доступной для сценариев TypeScript с использованием различных типов, уже скомпилированных в JavaScript. Определения могут быть заявлены к существующей библиотеке JavaScript, как это было сделано дляNode.js иJQuery.
Компилятор TypeScript пытаетсявывести типы, когда они не указаны явно. Например, методadd в приведенном выше коде будет выводить как возврат вnumber, даже если бы не было предусмотрено никакого возврата типа в определении. Это основано на статических типахleft иrightnumbers и познаниях компилятора о том, что результат сложения двухnumbers всегдаnumber. Тем не менее, прописывание возвращаемого типа позволяет компилятору проверить правильность.
Если тип не может быть выведен из-за отсутствия объявлений, то по умолчанию будет динамический типany. Значение типаany поддерживает те же операции, что и значение в JavaScript и минимальная статическая проверка типов выполняется для операции наany[14].
Файлы деклараций
[править |править код]Когда сценарий TypeScript будет скомпилирован, есть опция для созданияфайла декларации (с расширением.d.ts), который используется какинтерфейс ккомпонентам в скомпилированном JavaScript. В процессе компилятор удаляет все функции и тела методов и сохраняет только сигнатуры типов, которые экспортируются. Итоговый файл декларации может быть использован для описания экспортируемых виртуальных типов TypeScript библиотеки JavaScript или модуля, когда сторонний разработчик использует их в TypeScript.
Концепция файлов декларации аналогична таковой взаголовочных файлах вC++:
declaremodulearithmetics{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.
Классы
[править |править код]TypeScript поддерживает классыECMAScript 6, что позволяет поддерживать опцию объявления типов.
classPerson{constructor(privatereadonlyname:string,privatereadonlyage:number,privatereadonlysalary:number){}publictoString():string{return`Имя:${this.name}\nВозраст:${this.age}\nЗарплата:${this.salary}`;}}
Шаблоны
[править |править код]TypeScript поддерживаетобобщённое программирование[15].
Модули
[править |править код]Используя модули, TypeScript поддерживает инкапсуляцию классов, интерфейсов, функций и переменных в пространствах имен. TypeScript различает внутренние и внешние модули. Внутренние модули на основе синтаксиса модуля из ECMAScript 6, тогда как внешние модули используют библиотеку JavaScript (AMD илиCommonJS)[16].
Инструменты разработчика
[править |править код]Компилятор
[править |править код]Компилятор 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. Также поддерживается вVisual Studio Code.JetBrains поддерживает TypeScript, включая компиляцию, рефакторинг и отладку в IDE на платформе IntelliJ, например, PhpStorm 6, WebStorm 6, иIntelliJ IDEA, а также в их расширении для Visual Studio ReSharper 8.1. Поддерживается в средеCodeanywhere. ДляNetBeans иEclipse существует плагины для поддержки языка.
Среди онлайн-сред язык поддерживается вCloud9,Codenvy,CodePen.
Есть базовая поддержка языка в текстовых редакторах Sublime Text, Emacs и Vim. У редактораAtom есть плагин для TypeScript с поддержкой автодополнения, навигации по коду, форматирования и быстрой компиляции.
Примечания
[править |править код]- ↑Release 5.9 — 2025.
- ↑The typescript Open Source Project on Open Hub: Licenses Page — 2006.
- ↑Microsoft takes the wraps off TypeScript, a superset of JavaScript . Дата обращения: 2 октября 2012. Архивировано 13 ноября 2014 года.
- ↑12S. Somasegar. TypeScript: JavaScript Development at Application Scale (англ.) (1 октября 2012). Дата обращения: 1 ноября 2020. Архивировано изоригинала 3 марта 2016 года.
- ↑Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript? Дата обращения: 2 октября 2012. Архивировано 3 августа 2014 года.
- ↑Microsoft Augments Javascript for Large-scale Development . Дата обращения: 2 октября 2012. Архивировано изоригинала 17 декабря 2013 года.
- ↑Microsoft анонсировала новый язык веб-программирования TypeScript . Дата обращения: 2 октября 2012. Архивировано изоригинала 31 мая 2017 года.
- ↑Компания Microsoft представила TypeScript, новую открытую альтернативу JavaScript . Дата обращения: 2 октября 2012. Архивировано 4 октября 2012 года.
- ↑Open Web Foundation Final Specification Agreement (OWFa 1.0) . Дата обращения: 2 октября 2012. Архивировано 10 октября 2020 года.
- ↑Проект TypeScript на сайтеGitHub
- ↑Anders Hejlsberg. What is TypeScript and why with Anders Hejlsberg . www.hanselminutes.com (5 октября 2012). Дата обращения: 15 января 2014. Архивировано 27 декабря 2018 года.
- ↑Klint Finley. Microsoft Previews New JavaScript-Like Programming Language TypeScript . TechCrunch (1 октября 2012). Дата обращения: 27 ноября 2013. Архивировано 13 ноября 2012 года.
- ↑12Official TypeScript Home Page . Дата обращения: 2 октября 2012. Архивировано 10 марта 2018 года.
- ↑TypeScript Language Specification p.24Архивировано 17 ноября 2013 года.
- ↑Jonathan Turner. Announcing TypeScript 0.9 . msdn.com (18 июня 2013). Дата обращения: 27 ноября 2013. Архивировано 26 ноября 2013 года.
- ↑Sönke Sothmann. An introduction to TypeScript’s module system . blog.oio.de (31 января 2014). Дата обращения: 21 февраля 2014. Архивировано 1 февраля 2014 года.
Литература
[править |править код]- 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.
- Проект TypeScript на сайтеGitHub
- Языки программирования по алфавиту
- Языки программирования, появившиеся в 2012 году
- Свободное и открытое программное обеспечение Microsoft
- Семейство языков программирования JavaScript
- Скриптовые языки
- Кроссплатформенное программное обеспечение
- Программное обеспечение Microsoft
- Программное обеспечение с лицензией Apache
- Транспиляция
- Страницы, использующие устаревший тег source
- Википедия:Cite web (не указан язык)
- Википедия:Статьи с источниками из Викиданных
- ПРО:ИТ:Статьи по алфавиту
- ПРО:ИТ:Последняя правка: в прошлом году
- Википедия:Статьи, достоверность которых требует проверки с октября 2012 года
- Википедия:Статьи, достоверность которых требует проверки
- Википедия:Статьи с шаблонами недостатков по алфавиту
- Википедия:Статьи, достоверность которых требует проверки без пояснений в шаблоне
- Страницы, использующие волшебные ссылки ISBN