TypeScript

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
TypeScript
TypeScript Logo.png
Класс языка
Тип исполнения

компиляция в JavaScript

Появился в

01.10.2012

Автор

Андерс Хейлсберг (англ. Anders Hejlsberg) (Microsoft)

Расширение файлов

..ts.d.ts

Выпуск

2.6.1 (31.10.2017)

Испытал влияние

JavaScript, C#

Лицензия

OWFa 1.0, Лицензия Apache (компилятор)

Сайт

typescriptlang.org

TypeScript — язык программирования, представленный Microsoft в 2012 году и позиционируемый как средство разработки веб-приложений, расширяющее возможности JavaScript[1][2][3][4][5][6].

Разработчиком языка TypeScript является Андерс Хейлсберг (англ. Anders Hejlsberg), создавший ранее Turbo Pascal, Delphi и C#.

Спецификации языка открыты и опубликованы в рамках соглашения Open Web Foundation Specification Agreement (OWFa 1.0)[7].

TypeScript является обратно совместимым с JavaScript и компилируется в последний. Фактически, после компиляции программу на TypeScript можно выполнять в любом современном браузере или использовать совместно с серверной платформой Node.js. Код экспериментального компилятора, транслирующего TypeScript в JavaScript, распространяется под лицензией Apache. Его разработка ведётся в публичном репозитории через сервис GitHub[8].

TypeScript отличается от JavaScript возможностью явного[en] статического назначения типов, поддержкой использования полноценных классов (как в традиционных объектно-ориентированных языках), а также поддержкой подключения модулей, что призвано повысить скорость разработки, облегчить читаемость, рефакторинг и повторное использования кода, помочь осуществлять поиск ошибок на этапе разработки и компиляции, и, возможно, ускорить выполнение программ.

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

На момент релиза представлены файлы для восприятия расширенного синтаксиса TypeScript для Vim и Emacs, а также плагин для Microsoft Visual Studio.

Одновременно с выходом спецификации разработчики подготовили файлы с декларациями статических типов для некоторых популярных JavaScript-библиотек, среди которых jQuery.

Справка[править | править вики-текст]

TypeScript возник из-за предполагаемых недостатков JavaScript в крупномасштабных приложениях как в Microsoft, так и у прочих пользователей JavaScript.[9] Проблемы с разработкой сложных программ на JavaScript привели к необходимости облегчения разработки компонентов языка.[10]

Разработчики TypeScript искали решение, которое не будет нарушать совместимость со стандартом и его кросс-платформенной поддержкой. Зная, что только стандарт ECMAScript предлагает поддержку в будущем для программирования на базе классов (Class-based programming), TypeScript был основан на этом предположении. Это привело к созданию компилятора JavaScript с набором синтаксических языковых расширений, увеличенным на основе предложения, которое трансформирует расширения в JavaScript. В этом смысле TypeScript является представлением того, что ожидать от ECMAScript 6. Уникальный аспект не в предложении, а в добавлении в TypeScript статической типизации, что позволяет статически анализировать язык, облегчая оснастки и IDE поддержку.

Поддержка ECMAScript 6[править | править вики-текст]

TypeScript добавляет поддержку следующих функций: классы, модули и синтаксис функции стрелкой (стрелочных функций), как они были предложены в стандарте ECMAScript 6.

Особенности языка[править | править вики-текст]

TypeScript это расширение языка ECMAScript 5. Добавлены следующие опции:

Синтаксически, TypeScript очень похож на JScript .NET, очередную реализацию Microsoft языкового стандарта ECMA-262, обеспечивающего поддержку статической типизации и классических объектно-ориентированных возможностей языка, таких как классы, наследование, интерфейсы и пространства имен.

Совместимость с JavaScript[править | править вики-текст]

TypeScript является надстройкой над JavaScript. Таким образом, программа JavaScript также является правильной программой TypeScript, и программы TypeScript могут легко включать JavaScript. TypeScript компилирует ES3-совместимый JavaScript.[12] По умолчанию компилируется ECMAScript 3, как преобладающей стандарт; также есть возможность создавать конструкции, используемые в ECMAScript 5.

С TypeScript можно использовать существующий JavaScript-код, включать популярные библиотеки JavaScript, и вызывать TypeScript-код, сгенерированный из других JavaScript.[12] Объявление типов для этих библиотек поставляются вместе с исходным кодом.

Объявление типов[править | править вики-текст]

TypeScript обеспечивает объявления типов[en] для статической проверки их согласования. Это не является обязательным и может быть проигнорировано чтобы использовать обычную динамическую типизацию 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.[13]

Файлы деклараций[править | править вики-текст]

Когда сценарий 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 поддерживает обобщённое программирование.[14]

Модули[править | править вики-текст]

Используя модули, TypeScript поддерживает инкапсуляцию классов, интерфейсов, функций и переменных в пространствах имен. TypeScript различает внутренние и внешние модули. Внутренние модули на основе синтаксиса модуля из ECMAScript 6, тогда как внешние модули используют библиотеку JavaScript (AMD или CommonJS).[15]

Инструменты разработчика[править | править вики-текст]

Компилятор[править | править вики-текст]

Компилятор 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.

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. Microsoft takes the wraps off TypeScript, a superset of JavaScript
  2. TypeScript: JavaScript Development at Application Scale
  3. Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript?
  4. Microsoft Augments Javascript for Large-scale Development
  5. Microsoft анонсировала новый язык веб-программирования TypeScript
  6. Компания Microsoft представила TypeScript, новую открытую альтернативу JavaScript
  7. Open Web Foundation Final Specification Agreement (OWFa 1.0)
  8. Проект TypeScript на сайте GitHub
  9. Anders Hejlsberg. What is TypeScript and why with Anders Hejlsberg. www.hanselminutes.com (5 октября 2012). Проверено 15 января 2014.
  10. S. Somasegar. TypeScript: JavaScript Development at Application Scale. msdn.com (1 октября 2012). Проверено 27 ноября 2013.
  11. Klint Finley. Microsoft Previews New JavaScript-Like Programming Language TypeScript. TechCrunch (1 октября 2012). Проверено 27 ноября 2013.
  12. 1 2 Official TypeScript Home Page
  13. TypeScript Language Specification p.24 Архивировано 17 ноября 2013 года.
  14. Jonathan Turner. Announcing TypeScript 0.9. msdn.com (18 июня 2013). Проверено 27 ноября 2013.
  15. 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.

Ссылки[править | править вики-текст]