# TypeScript

| TypeScript |
| --- |
|  |
| Клас мовы |
мультыпарадыгменная: функцыянальная, абагульненая, імператыўная, аб’ектна-арыентаваная |
| З’явілася ў | 1 кастрычніка 2012 |
| Аўтар(ы) | Microsoft |
| Пашырэнне файлаў |
ts, tsx |
| Тыпізацыя даных | качыная, паслядоўная, структурная |
| Зведала ўплыў | JavaScript, C#, Java і CoffeeScript[d] |
| Паўплывала на |
AtScript, AssemblyScript |
| Ліцэнзія | Apache Software License 2.0[d] |
| Сайт | typescriptlang.org (англ.) |

**TypeScript** — гэта свабодная мова праграмавання высокага ўзроўню з адкрытым зыходным кодам. Яна распрацавана Microsoft. TypeScript дадае ў JavaScript статычную тыпізацыю з дадатковымі анатацыямі тыпаў. Яна прызначана для распрацоўкі вялікіх праграм і транспілюе зыходны код ў JavaScript. Паколькі TypeScript з’яўляецца падмноствам JavaScript, усе праграмы на JavaScript сінтаксічна карэктныя для TypeScript, аднак у мэтах бяспекі яны могуць не праходзіць праверку тыпаў.

TypeScript можа выкарыстоўвацца для распрацоўкі JavaScript-праграм як для выканання на баку кліента, так і на баку сервера (як у Node.js ці Deno). Для транспіляцыі даступна некалькі варыянтаў. Можна выкарыстоўваць стандартны кампілятар TypeScript, або можна выклікаць кампілятар Babel.

TypeScript падтрымлівае файлы азначэнняў, якія могуць утрымліваць інфармацыю аб тыпах існых бібліятэк JavaScript, падобна таму як загалоўкавыя файлы C++ могуць апісваць структуру існых аб’ектных файлаў. Гэта дазваляе іншым праграмам выкарыстоўваць значэнні, апісаныя ў гэтых файлах так, як калі б яны былі статычна тыпізаванымі сутнасцямі TypeScript. Існуюць іншыя загалоўкавыя файлы для такіх папулярных бібліятэк, як jQuery, MongoDB і D3.js. Таксама даступныя загалоўкі TypeScript для модуляў бібліятэк Node.js, што дазваляе распрацоўваць праграмы на Node.js у рамках TypeScript.

Кампілятар TypeScript сам напісаны на мове TypeScript і скампіляваны ў JavaScript. Ён ліцэнзуецца ў адпаведнасці з ліцэнзіяй Apache 2.0. Андэрс Хэйлсберг, вядучы архітэктар C# і стваральнік Delphi і Turbo Pascal, удзельнічаў у распрацоўцы TypeScript.

## Асаблівасці

TypeScript — гэта пашырэнне мовы, якое дадае магчымасці ў стандарт ECMAScript 6. Дадатковыя магчымасці ўключаюць:

* Анатацыі тыпу і праверка тыпу падчас кампіляцыі
* Вывад тыпу
* Сціранне тыпу
* Інтэрфейсы
* Пералічальныя тыпы
* Джэнерыкі
* Прастор імёнаў
* Картэжы
* Async/await

Наступныя функцыі перанесены з ECMAScript 2015:

* Класы
* Модулі
* Скарочаны сінтаксіс «стрэлкі» для ананімных функцый
* Неабавязковыя параметры і параметры па змаўчанні

Сінтаксічна TypeScript вельмі падобны на JScript.NET, іншай рэалізацыі Microsoft стандарту ECMA-262, якая дадала падтрымку статычнага тыпу і класічных функцый аб’ектна-арыентаванай мовы, такіх як класы, спадчыннасць, інтэрфейсы і прастор імёнаў.

### Сумяшчальнасць з JavaScript

TypeScript з’яўляецца строгім супермноствам ECMAScript 2015, які сам з’яўляецца супермноствам ECMAScript 5, звычайна званага JavaScript. Такім чынам, праграма на JavaScript таксама з’яўляецца карэктнай праграмай на TypeScript, а праграма на TypeScript можа без праблем выкарыстоўваць JavaScript. Па змаўчанні кампілятар арыентаваны на ECMAScript 5, які зараз з’яўляецца пераважным стандартам, але таксама здольны генераваць канструкцыі, якія выкарыстоўваюцца ў ECMAScript 3 ці 2015.

З дапамогай TypeScript можна выкарыстоўваць існуючы код JavaScript, уключаць у яго папулярныя бібліятэкі JavaScript і выклікаць код, згенераваны на TypeScript, з іншых бібліятэк JavaScript. Дэкларацыі тыпаў для гэтых бібліятэк прадастаўляюцца разам з зыходным кодам.

### Анатацыі тыпаў

TypeScript забяспечвае статычную тыпізацыю з дапамогай анатацый тыпаў, што дазваляе выконваць праверку тыпаў падчас кампіляцыі. Гэта неабавязкова і можа быць праігнаравана для выкарыстання звычайнай дынамічнай тыпізацыі JavaScript.

```
function add(left: number, right: number): number {
 return left + right;
}

```

### Класы

TypeScript падтрымлівае класы ECMAScript 2015, у якіх рэалізавана падтрымка дадатковых анатацый тыпаў.

```
class Person {
 private name: string;
 private age: number;
 private salary: number;

 constructor(name: string, age: number, salary: number) {
 this.name = name;
 this.age = age;
 this.salary = salary;
 }

 toString(): string {
 return `${this.name} (${this.age}) (${this.salary})`; // As of version 1.4
 }
}

```

### Джэнерыкі

TypeScript падтрымлівае абагульненае праграмаванне. Ніжэй прыведзены прыклад выкарыстання функцыі Identity.

```
function id<T>(x: T): T {
 return x;
}

```

## Зноскі