Русская Википедия:TypeScript

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

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

Разработчиком языка TypeScript является Андерс Хейлсберг, создавший ранее 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 возможностью явного статического назначения типов, поддержкой использования полноценных классов (как в традиционных объектно-ориентированных языках), а также поддержкой подключения модулей, что призвано повысить скорость разработки, облегчить читаемость, рефакторинг и повторное использование кода, помочь осуществлять поиск ошибок на этапе разработки и компиляции, и, возможно, ускорить выполнение программ.

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

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

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

Справка

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

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

Поддержка ECMAScript 6

Шаблон:Main

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

Примеры кода

Генератор псевдослучайных паролей с использованием модуля «crypto», встроенного в Node.js:

import * as crypto from "crypto";

function generate(length: number = 16) : string {
  const uppercase: string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  const lowercase: string = "abcdefghijklmnopqrstuvwxyz";
  const numbers: string = "0123456789";
  const symbols: string = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
  const all: string = uppercase + lowercase + numbers + symbols;
  let password: string = "";
  for (let index: number = 0; index < length; index++) {
    const randomNumber: number = 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[11]. Объявление типов для этих библиотек зачастую поставляется вместе с ними, либо же может быть написано вручную.

По умолчанию TypeScript компилируется в совместимый с ES3 JavaScript[11] как преобладающей стандарт. С помощью параметра --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[12].

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

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

Модули

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

Инструменты разработчика

Компилятор

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

Примечания

Шаблон:Примечания

Литература

Ссылки

Шаблон:Rq

Внешние ссылки

  1. Ошибка цитирования Неверный тег <ref>; для сносок zdnet.com.microsoft-takes не указан текст
  2. 2,0 2,1 Ошибка цитирования Неверный тег <ref>; для сносок blogs.msdn.com.typescrip не указан текст
  3. Ошибка цитирования Неверный тег <ref>; для сносок dnet.com.microsoft-typescript не указан текст
  4. Ошибка цитирования Неверный тег <ref>; для сносок cio.com.cio.com.717679 не указан текст
  5. Ошибка цитирования Неверный тег <ref>; для сносок cybersecurity.ru.161240 не указан текст
  6. Ошибка цитирования Неверный тег <ref>; для сносок opennet.ru.34981 не указан текст
  7. Ошибка цитирования Неверный тег <ref>; для сносок OWFa-1.0 не указан текст
  8. Шаблон:Github
  9. Шаблон:Cite web
  10. Шаблон:Cite web
  11. 11,0 11,1 Шаблон:Cite web
  12. TypeScript Language Specification p.24 Шаблон:Webarchive
  13. Шаблон:Cite web
  14. Шаблон:Cite web

Шаблон:Выбор языка Шаблон:JavaScript Шаблон:Node.js Шаблон:Свободное и открытое программное обеспечение Microsoft