TypeScript

Класс языка |

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

прототипное программирование

Тип исполнения |  компиляция в JavaScript
Появился в |  1 октября 2012
Автор |  Microsoft
Разработчик |  Microsoft
Расширение файлов |  `.ts` или `.tsx`
Выпуск |

* 5.8.2 (28 февраля 2025)[1]

Испытал влияние |  JavaScript, C#, Java и CoffeeScript
Лицензия |  Apache License 2.0[2]
Сайт |  typescriptlang.org (англ.)
Медиафайлы на Викискладе

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

Разработчиком языка 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.

## Содержание

* 1 Справка
* 1.1 Поддержка ECMAScript 6
* 2 Примеры кода
* 3 Особенности языка
* 3.1 Совместимость с JavaScript
* 3.2 Объявление типов
* 3.2.1 Файлы деклараций
* 3.3 Классы
* 3.4 Шаблоны
* 3.5 Модули
* 4 Инструменты разработчика
* 4.1 Компилятор
* 4.2 IDE и поддержка редакторов
* 5 Примечания
* 6 Литература
* 7 Ссылки

## Справка

[править | править код]

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

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

### Поддержка ECMAScript 6

[править | править код]

Основная статья: ECMAScript Harmony (6th Edition)

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\. Добавлены следующие опции:

* аннотации типов и проверка их согласования на этапе компиляции[англ.];
* вывод типов;
* классы;
* интерфейсы;
* перечисляемые типы;
* примесь;
* обобщённое программирование;
* модули[12];
* сокращённый синтаксис «стрелок» для анонимных функций;
* дополнительные параметры и параметры по умолчанию;
* кортежи.

Синтаксически 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. ↑ 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 (неопр.). Дата обращения: 2 октября 2012. Архивировано 13 ноября 2014 года.
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? (неопр.) Дата обращения: 2 октября 2012. Архивировано 3 августа 2014 года.
6. ↑ Microsoft Augments Javascript for Large-scale Development (неопр.). Дата обращения: 2 октября 2012. Архивировано из оригинала 17 декабря 2013 года.
7. ↑ Microsoft анонсировала новый язык веб-программирования TypeScript (неопр.). Дата обращения: 2 октября 2012. Архивировано из оригинала 31 мая 2017 года.
8. ↑ Компания Microsoft представила TypeScript, новую открытую альтернативу JavaScript (неопр.). Дата обращения: 2 октября 2012. Архивировано 4 октября 2012 года.
9. ↑ Open Web Foundation Final Specification Agreement (OWFa 1.0) (неопр.). Дата обращения: 2 октября 2012. Архивировано 10 октября 2020 года.
10. ↑ Проект TypeScript на сайте GitHub
11. ↑ Anders Hejlsberg. What is TypeScript and why with Anders Hejlsberg (неопр.). www.hanselminutes.com (5 октября 2012). Дата обращения: 15 января 2014. Архивировано 27 декабря 2018 года.
12. ↑ Klint Finley. Microsoft Previews New JavaScript-Like Programming Language TypeScript (неопр.). TechCrunch (1 октября 2012). Дата обращения: 27 ноября 2013. Архивировано 13 ноября 2012 года.
13. ↑ 1 2 Official TypeScript Home Page (неопр.). Дата обращения: 2 октября 2012. Архивировано 10 марта 2018 года.
14. ↑ TypeScript Language Specification p.24 Архивировано 17 ноября 2013 года.
15. ↑ Jonathan Turner. Announcing TypeScript 0.9 (неопр.). msdn.com (18 июня 2013). Дата обращения: 27 ноября 2013. Архивировано 26 ноября 2013 года.
16. ↑ Sönke Sothmann. An introduction to TypeScript’s module system (неопр.). 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. TypeScript revealed. — Apress, 2013. — ISBN 9781430257257.

## Ссылки

[править | править код]

* Официальный сайт языка программирования TypeScript.
* CATS (Code Assistant for TypeScript) — интегрированная среда разработки для TypeScript.
* Проект TypeScript на сайте GitHub

Для улучшения этой статьи желательно:

* Проверить достоверность указанной в статье информации. На странице обсуждения должны быть пояснения.

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

|

Ссылки на внешние ресурсы

В социальных сетях

* Mastodon

Тематические сайты|

* Open Hub

В библиографических каталогах|

* J9U: 987007570557905171
* LCCN: sh2013001822

JavaScript

Идеи|

* Библиотека JavaScript
* Движок JavaScript
* Ненавязчивый JavaScript

Компиляторы|

* asm.js
* CoffeeScript
* Dart
* Emscripten
* TypeScript

Движки|

* Chakra[англ.]
* Nashorn
* Futhark/Carakan
* Rhino
* SpiderMonkey
* SquirrelFish
* V8

Библиотеки
и фреймворки|

* Angular/AngularJS
* Babylon.js
* Backbone.js
* Dojo
* Ember.js
* Ext JS
* Jest[англ.]
* jQuery
* jQuery Mobile
* JQuery UI
* JsSIP
* Knockout.js
* Meteor
* Mocha
* MooTools
* Prototype
* React
* Redux
* script.aculo.us
* Socket.IO
* Svelte[англ.]
* Three.js
* Underscore
* Vue.js
* Yahoo! UI Library

Редакторы|

* Aptana Studio
* Atom
* Eclipse
* NetBeans
* Sublime Text
* WebStorm
* Vim
* Visual Studio
* Visual Studio Code

Инструменты|

* Deno
* Electron
* Firebug
* Internet Explorer Developer Tools
* JSDoc
* JSHint
* JSLint
* Node.js
* npm
* Opera Dragonfly
* QUnit
* Venkman
* webpack
* yarn[англ.]

Связанные
технологии|

* AJAX
* DHTML
* DOM
* HTML5
* JSON
* WebAssembly
* XMLHttpRequest

Люди|

* Брендан Эйх
* Джереми Ашкенас
* Джон Резиг
* Дуглас Крокфорд
* Райан Даль

Категория

Node.js

Платформа|

* Node.js
* Io.js
* npm
* V8
* CommonJS

Фреймворки|

* MEAN (MongoDB
* Express
* AngularJS)
* Underscore
* Backbone.js

Языки|

* JavaScript
* CoffeeScript
* TypeScript

Хосты|

* Joyent
* Nodejitsu
* OpenShift
* Linode
* DigitalOcean

Свободное и открытое программное обеспечение Microsoft

Общая информация|

* Microsoft и открытое программное обеспечение[англ.]
* Shared Source Initiative

Программное
обеспечение|

| Приложения|

* Atom
* Conference XP
* Диспетчер файлов
* Open Live Writer
* PowerToys for Windows 10
* Калькулятор (Windows)
* Windows Console
* Windows Package Manager
* Windows Terminal
* WorldWide Telescope
* XML Notepad

|

Игры|

* Allegiance[англ.]

Языки
программирования|

* Bosque
* C#
* Dafny
* F#
* F*
* GW-BASIC
* IronPython
* IronRuby
* Lean
* P[англ.]
* PowerShell
* Q#
* R Open
* Small Basic
* TypeScript
* Visual Basic .NET

Фреймворки и
средства разработки|

* .NET Bio
* .NET
* .NET Framework
* .NET Gadgeteer
* .NET Micro Framework
* ADO.NET Entity Framework
* AirSim
* Apache Helix
* ASP.NET
* ASP.NET AJAX
* ASP.NET Core
* ASP.NET MVC
* ASP.NET Razor
* ASP.NET Web Forms
* Babylon.js
* Blazor
* C++/WinRT
* ChakraCore[англ.]
* CLR Profiler
* DiskSpd
* Dryad[англ.]
* Dynamic Language Runtime
* Electron
* Managed Extensibility Framework
* Microsoft Automatic Graph Layout
* Microsoft C++ Standard Library
* Microsoft Cognitive Toolkit
* Microsoft Detours
* Microsoft Enterprise Library
* Microsoft SEAL
* ML.NET
* mod_mono
* Mono
* MonoDevelop
* MSBuild
* npm
* NuGet
* Open Management Infrastructure
* ONNX
* Orleans[англ.]
* ProcDump
* Python Tools for Visual Studio
* R Tools for Visual Studio
* Roslyn
* Sandcastle
* SignalR
* StyleCop
* SVNBridge
* T2 Temporal Prover
* Text Template Transformation Toolkit
* TLA⁺
* U-Prove
* vcpkg
* Virtual File System for Git
* Visual Studio Code
* Voldemort[англ.]
* Vowpal Wabbit
* Windows Communication Foundation
* Windows Driver Frameworks
* Windows Forms
* Windows Presentation Foundation
* Windows Template Library
* Windows UI Library
* WinJS
* WinObjC
* WiX
* XSP[англ.]
* xUnit.net
* Z3 Theorem Prover

Операционные
системы|

* MS-DOS
* Barrelfish

Прочее|

* ChronoZoom
* Project Mu
* SILK
* TLAPS
* TPM 2.0 Reference Implementation
* WikiBhasha

Лицензии|

* Microsoft Public License
* Microsoft Reciprocal License

Связанные темы|

* .NET Foundation
* F Sharp Software Foundation
* Microsoft Open Specification Promise
* Outercurve Foundation

Категория