Interested Article - TypeScript
- 2020-12-07
- 1
TypeScript — язык программирования , представленный Microsoft в 2012 году и позиционируемый как средство разработки веб-приложений , расширяющее возможности JavaScript .
Разработчиком языка TypeScript является Андерс Хейлсберг , создавший ранее Turbo Pascal , Delphi и C# .
Спецификации языка открыты и опубликованы в рамках соглашения Open Web Foundation Specification Agreement (OWFa 1.0) .
TypeScript является обратно совместимым с JavaScript и компилируется в последний. Фактически, после компиляции программу на TypeScript можно выполнять в любом современном браузере или использовать совместно с серверной платформой Node.js . Код экспериментального компилятора, транслирующего TypeScript в JavaScript, распространяется под лицензией Apache . Его разработка ведётся в публичном репозитории через сервис GitHub .
TypeScript отличается от JavaScript возможностью явного статического назначения типов, поддержкой использования полноценных классов (как в традиционных объектно-ориентированных языках), а также поддержкой подключения модулей, что призвано повысить скорость разработки, облегчить читаемость, рефакторинг и повторное использование кода, помочь осуществлять поиск ошибок на этапе разработки и компиляции, и, возможно, ускорить выполнение программ.
Планируется, что в силу полной обратной совместимости адаптация существующих приложений на новый язык программирования может происходить поэтапно, путём постепенного определения типов.
На момент релиза представлены файлы для восприятия расширенного синтаксиса TypeScript для Vim и Emacs , а также плагин для Microsoft Visual Studio .
Одновременно с выходом спецификации разработчики подготовили файлы с декларациями статических типов для некоторых популярных JavaScript-библиотек , среди которых jQuery .
Справка
TypeScript возник из-за предполагаемых недостатков JavaScript в крупномасштабных приложениях как в компании Microsoft, так и у прочих пользователей JavaScript . Проблемы с разработкой сложных программ на JavaScript привели к необходимости облегчения разработки компонентов языка .
Разработчики TypeScript искали решение, которое не будет нарушать совместимости со стандартом и его кроссплатформенной поддержкой. Зная, что только стандарт ECMAScript предлагает поддержку в будущем для программирования на базе классов ( ), они основали TypeScript на этом предположении. Это привело к созданию компилятора JavaScript с набором синтаксических языковых расширений, увеличенным на основе предложения, которое трансформирует расширения в JavaScript. В этом смысле TypeScript является представлением того, что ожидать от ECMAScript 6. Уникальный аспект не в предложении, а в добавлении в TypeScript статической типизации , что позволяет статически анализировать язык, облегчая оснастки и IDE-поддержку.
Поддержка ECMAScript 6
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 . Объявление типов для этих библиотек зачастую поставляется вместе с ними либо же может быть написано вручную.
По умолчанию TypeScript компилируется в совместимый с ES3 JavaScript как преобладающей стандарт. С помощью параметра --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
.
Файлы деклараций
Когда сценарий 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 поддерживает обобщённое программирование .
Модули
Используя модули, TypeScript поддерживает инкапсуляцию классов, интерфейсов, функций и переменных в пространствах имен. TypeScript различает внутренние и внешние модули. Внутренние модули на основе синтаксиса модуля из ECMAScript 6, тогда как внешние модули используют библиотеку JavaScript ( AMD или ) .
Инструменты разработчика
Компилятор
Компилятор 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. Поддерживается в среде . Для NetBeans и Eclipse существует плагины для поддержки языка.
Среди онлайн-сред язык поддерживается в Cloud9 , , CodePen .
Есть базовая поддержка языка в текстовых редакторах Sublime Text, Emacs и Vim. У редактора Atom есть плагин для TypeScript с поддержкой автодополнения, навигации по коду, форматирования и быстрой компиляции.
Примечания
- — 2023.
- — 2023.
- — 2006.
- . Дата обращения: 2 октября 2012. 13 ноября 2014 года.
- ↑ S. Somasegar. (англ.) (1 октября 2012). Дата обращения: 1 ноября 2020. Архивировано из 3 марта 2016 года.
- Дата обращения: 2 октября 2012. 3 августа 2014 года.
- . Дата обращения: 2 октября 2012. Архивировано из 17 декабря 2013 года.
- . Дата обращения: 2 октября 2012. Архивировано из 31 мая 2017 года.
- . Дата обращения: 2 октября 2012. 4 октября 2012 года.
- . Дата обращения: 2 октября 2012. 10 октября 2020 года.
- на сайте GitHub
- Anders Hejlsberg. . www.hanselminutes.com (5 октября 2012). Дата обращения: 15 января 2014. 27 декабря 2018 года.
- Klint Finley. . TechCrunch (1 октября 2012). Дата обращения: 27 ноября 2013. 13 ноября 2012 года.
- ↑ . Дата обращения: 2 октября 2012. 10 марта 2018 года.
- 17 ноября 2013 года.
- Jonathan Turner. . msdn.com (18 июня 2013). Дата обращения: 27 ноября 2013. 26 ноября 2013 года.
- Sönke Sothmann. . blog.oio.de (31 января 2014). Дата обращения: 21 февраля 2014. 1 февраля 2014 года.
Литература
- Steve Fenton. Pro TypeScript: Application-Scale JavaScript Development. — Apress, 2014. — ISBN 978-1-4302-6791-1 .
- Dan Maharry. . — Apress, 2013. — ISBN 9781430257257 .
Ссылки
- .
- — интегрированная среда разработки для TypeScript.
- на сайте GitHub
- 2020-12-07
- 1