TypeScript

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

мультипарадигмальный: объектно-ориентированное, обобщённое, функциональное, императивное, аспектно-ориентированное, событийно-ориентированное, прототипное программирование

Тип исполнения:

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

Появился в:

2012

Автор:

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

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

.ts.d.ts

Выпуск:

2.0.8 (08.11.2016)

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

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, так и у прочих их клиентов.[9] Проблемы с комплексной разработкой кода на JavaScript привели к необходимости облегчения разработки компонентов языка.[10]

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

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

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

Хотя стандарт не готов, Microsoft заявила, что стремится расширить возможности TypeScript до предложенного стандарта.

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

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.

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

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

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

  • 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.

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