TypeScript

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

TypeScript
Класс языка
Тип исполнения компиляция в JavaScript
Появился в 1 октября 2012
Автор Майкрософт
Расширение файлов .ts или .tsx
Выпуск
Испытал влияние JavaScript, C#, Java и CoffeeScript
Лицензия Apache License 2.0[2]
Сайт typescriptlang.org (англ.)
 Медиафайлы на Викискладе

Разработчиком языка 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 * as crypto from "crypto";

function generate(length = 16) {
  const uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  const lowercase = "abcdefghijklmnopqrstuvwxyz";
  const numbers = "0123456789";
  const symbols = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
  const all = uppercase + lowercase + numbers + symbols;
  let password = "";
  for (let index = 0; index < length; index++) {
    const randomNumber = crypto.randomInt(all.length);
    password += all.charAt(randomNumber);
  }
  return password;
}

Особенности языка

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

Синтаксически, 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:

tsc app.ts -t ES5

Объявление типов

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[14].

Файлы деклараций

Когда сценарий 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.

Классы

TypeScript поддерживает классы ECMAScript 6, что позволяет поддерживать опцию объявления типов.

class Person {
  constructor(
    private readonly name: string,
    private readonly age: number,
    private readonly salary: number
  ) {}

  public toString(): 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 с поддержкой автодополнения, навигации по коду, форматирования и быстрой компиляции.

Примечания

  1. https://github.com/microsoft/TypeScript/releases/tag/v4.5.5
  2. The typescript Open Source Project on Open Hub: Licenses Page — 2006.
  3. Microsoft takes the wraps off TypeScript, a superset of JavaScript
  4. S. Somasegar. TypeScript: JavaScript Development at Application Scale (англ.) (недоступная ссылка) (1 октября 2012). Дата обращения: 1 ноября 2020. Архивировано 3 марта 2016 года.
  5. Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript?
  6. Microsoft Augments Javascript for Large-scale Development
  7. Microsoft анонсировала новый язык веб-программирования TypeScript (недоступная ссылка). Дата обращения: 2 октября 2012. Архивировано 31 мая 2017 года.
  8. Компания Microsoft представила TypeScript, новую открытую альтернативу JavaScript
  9. Open Web Foundation Final Specification Agreement (OWFa 1.0)
  10. Проект TypeScript на сайте GitHub
  11. Anders Hejlsberg. What is TypeScript and why with Anders Hejlsberg. www.hanselminutes.com (5 октября 2012). Дата обращения: 15 января 2014.
  12. Klint Finley. Microsoft Previews New JavaScript-Like Programming Language TypeScript. TechCrunch (1 октября 2012). Дата обращения: 27 ноября 2013.
  13. Official TypeScript Home Page
  14. TypeScript Language Specification p.24 Архивировано 17 ноября 2013 года.
  15. Jonathan Turner. Announcing TypeScript 0.9. msdn.com (18 июня 2013). Дата обращения: 27 ноября 2013.
  16. Sönke Sothmann. An introduction to TypeScript’s module system. blog.oio.de (31 января 2014). Дата обращения: 21 февраля 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.

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.