TypeScript

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая 46.175.252.25 (обсуждение) в 18:16, 7 мая 2021. Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску
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 привели к необходимости облегчения разработки компонентов языка[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 могут легко включать JavaScript. TypeScript компилирует ES3-совместимый JavaScript[13]. По умолчанию компилируется ECMAScript 3, как преобладающей стандарт; также есть возможность создавать конструкции, используемые в ECMAScript 5.

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

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

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;
    substract(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 {
  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.
  • Есть базовая поддержка в текстовых редакторах 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. Release v5.8.2
  2. The typescript Open Source Project on Open Hub: Licenses Page — 2006.
  3. Microsoft takes the wraps off TypeScript, a superset of JavaScript
  4. 1 2 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. 1 2 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. 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.

Ссылки