TypeScript

TypeScript − Microsoft tárepinen jaratılǵan biypul hám ashıq kodlı joqarı dárejeli programmalastırıw tili, ol JavaScript-ke qosımsha túrdegi annotaciyalar menen statikalıq teriwdi (jazıwdı) qosadı. Ol úlken qosımshalardı jaratıwǵa hám JavaScript-ke transpilyaciyalawǵa arnalǵan. TypeScript JavaScript-tiń joqarı jıynaǵı bolǵanlıqtan, barlıq JavaScript programmaları sintaksislik jaǵınan TypeScript-ke jaramlı bolıp tabıladı, biraq olar qáwipsizlik sebepleri boyınsha teriwdi teksere almaydı.

TypeScript klient tárepinen de, server tárepinen de orınlaw ushın JavaScript qosımshaların jaratıw ushın paydalanıwı múmkin (Node.js, Deno yamasa Bun sıyaqlı). Transpilyaciya ushın bir neshe opciyalar bar. Standart TypeScript kompilyatorın paydalanıwǵa boladı yamasa TypeScript-ti JavaScript-ke aylandırıw ushın Babel kompilyatorın shaqırıwǵa boladı.

TypeScript bar JavaScript kitapxanalarınıń tip informaciyasın qamtıytuǵın anıqlawshı fayllardı qollaydı, C++ kitapxana faylları bar obyekt fayllarınıń strukturasın sáwlelendire aladı. Bul basqa programmalarǵa fayllarda anıqlanǵan mánislerdi statikalıq túrde terilgen TypeScript obyektleri sıyaqlı paydalanıwǵa imkaniyat beredi. jQuery, MongoDB hám D3.js sıyaqlı ataqlı kitapxanalarǵa arnalǵan úshinshi tárep kitapxana faylları bar. Node.js kitapxana modulleri ushın TypeScript kitapxanalarında da TypeScript ishinde Node.js programmaların rawajlandırıwǵa imkaniyat beredi.

TypeScript kompilyatorınıń ózi TypeScript tilinde jazılǵan hám JavaScript-ke kompilyaciya etilgen. Ol Apache 2.0 licenziyası boyınsha licenziyalanǵan. Anders Xeylsberg, C# tiliniń jetekshi arxitektorı hámde Delphi hám Turbo Pascal tiliniń jaratıwshısı, TypeScript-ti islep shıǵıw boyınsha jumıs isledi.

## Tariyxı
TypeScript 2012-jıl Microsoft korporaciyasında eki jıllıq ishki rawajlanıwdan keyin 0.8 versiyası menen kópshilikke shıǵarıldı. Aradan kóp ótpesten dáslepki járiyalanıwdan keyin Migel de Ikaza tildiń ózin joqarı bahaladı, biraq ol gezde Linux hám OS X sistemalarında bolmaǵan Microsoft Visual Studio-dan basqa jetilisken ortalıq (IDE) qollawınıń joqlıǵın sınadı. 2021-jıl aprelden baslap basqa programmalastırıw ortalıq hám tekst redaktorlarda, sonıń ishinde Emacs, Vim, WebStorm, Atom hám Microsoft korporaciyasınıń jeke Visual Studio Code qollawı bar. 2013-jılı shıǵarılǵan TypeScript 0.9 generiklerge qollawdı qostı.

TypeScript 1.0 2014-jılı Microsoft Build baǵdarlamashılar konferenciyasında shıǵarıldı. Visual Studio 2013 Update 2 TypeScript ushın ornatılǵan qollawdı támiyinledi. Keyingi jetilistiriw 2014-jıl iyulda ámelge asırıldı, baǵdarlamashılar toparı ónimliliktiń bes ese artqanın hám jańa kompilyatorın járiyaladı. Bir waqıtta CodePlex-te dáslepki ornatılǵan derek kodı GitHub-qa kóshirildi..

2016-jıl 22-sentyabrde TypeScript 2.0 shıǵarıldı, ol bir neshe imkaniyatlardı, sonıń ishinde baǵdarlamashılarǵa geyde milliard dollarlıq qáte dep atalatuǵın qáteni azaytıw ushın nollik qáwipsizlikti tańlaw imkaniyatın qostı.

TypeScript 3.0 2018-jıl 30-iyulda islep shıǵarıldı, ol demalıs parametrlerindegi kortejler hám tarqalıw ańlatpaları, kortej tipleri bar demalıs parametrleri, ulıwma demalıs parametrleri h.t.b. sıyaqlı kóplegen til tolıqtırıwların ákeldi.

TypeScript 4.0 2020-jıl 20-avgustte shıǵarıldı. 4.0 heshqanday úzilissiz ózgerissiz kirgizbese de, ol Custom JSX Factories hám Variadic Tuple Types sıyaqlı til imkaniyatların qostı.

TypeScript 5.0 2023-jıl 16-martta shıǵarıldı hám dekoratorlardı qollawdı óz ishine aldı.

## Proektlestiriw
TypeScript Microsoft korporaciyasında da, olardıń sırtqı tutınıwshıları arasında da keń kólemli qosımshalardı jaratıwǵa arnalǵan JavaScript kemshiliklerinen payda boldı. Quramalı JavaScript kodı menen jumıs islew qıyınshılıqları tildegi komponentlerdi jaratıwdı jeńilletiw ushın arnawlı qurallarǵa bolǵan talaptı payda etti.

TypeScript baǵdarlamashıları standart penen hám onıń kross-platformalıq qollawı menen úylesimlilikti buzbaytuǵın sheshim izledi. Aǵımdaǵı ECMAScript standart usınısı keleshekte klasqa tiykarlanǵan programmalastırıwdı qollap-quwatlawın bilip, TypeScript usı usınısqa tiykarlanǵan. Bul sintaksislik til keńeytpeleriniń jıynaǵı bar JavaScript kompilyatorına ákeldi, keńeytpelerin ápiwayı JavaScript-ke aylandıratuǵın usınısqa tiykarlanǵan joqarı toplam. Usı mániste, TypeScript klass imkaniyatı ECMAScript 2015 versiyasınan ne kútiwge bolatuǵının aldınnan kóriw edi. Usınısta emes, biraq TypeScript programmasına qosılǵan ózine tán aspekt − statikalıq tildi analizlewge imkaniyat beretuǵın qosımsha statikalıq teriw (birimlep teriw dep te ataladı) qurallardı hám IDE qollawın jeńilletedi.

### JavaScript penen úylesimlilik
TypeScript – bul ECMAScript 2015 programmasınıń qatań toplamı, onıń ózi ádette JavaScript dep atalatuǵın ECMAScript 5-tiń joqarı toplamı bolıp tabıladı. Solay etip, JavaScript programması da tiyisli TypeScript programması bolıp tabıladı hám TypeScript baǵdarlaması JavaScript-ti úziliksiz tutınıwı múmkin. Ádepki boyınsha kompilyator aǵımdaǵı basım standart ECMAScript 5-ke baǵdarlanǵan, biraq sonıń menen birge ECMAScript 3 yamasa 2015-te paydalanatuǵın konstrukciyalardı isley aladı.

TypeScript járdemi menen bar JavaScript kodın paydalanıwǵa, ataqlı JavaScript kitapxanaların biriktiriwge hám basqa JavaScript-ten TypeScript arqalı jaratılǵan kodtı shaqırıwǵa boladı. Bul kitapxanalar ushın tiplik deklaraciyalar derek kodı menen birge keledi.

### Generikler
TypeScript Java-ǵa uqsas sintaksisti paydalanıp ulıwmalastırılǵan programmalastırıwdı *(ingl. generic programming)* qollaydı. Tómende indentifikaciya funkciyasına mısal keltirilgen.
```typescript
function id<T>(x: T): T {
 return x;
}
```


### Klaslar
TypeScript sáykes funkciyalar menen ózgeriwshiler sıyaqlı klass metodları menen maydanları ushın birdey annotaciya mánislerin paydalanadı. Vanil JavaScript klasları menen salıstırǵanda, TypeScript klası interfeysti `implements` gilt sózi arqalı ámelge asıra aladı, Java-ǵa uqsas ulıwma parametrlerdi paydalana aladı hám ulıwma hámde jeke maydanlardı kórsete aladı. 
```typescript
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})`;
 }
}
```


### Moduller hám atlar keńisligi (namespaces)
TypeScript moduller menen atlar keńisliklerin *(ingl. namespaces)* ajıratadı. TypeScript-tiń eki imkaniyatı da klaslardı, interfeyslerdi, funkciyalardı hám ózgeriwshi mánislerdi konteynerlerge inkapsulyaciyalawdı qollaydı. At keńisligi (burınǵı ishki moduller) kodtı inkapsulyaciyalaw ushın JavaScript operativ shaqırılatuǵın funkciya ańlatpaların paydalanadı, al moduller (burınǵı sırtqı moduller) bunı islew ushın JavaScript kitapxanasınıń shablonların paydalanadı (AMD yamasa CommonJS).

## Islep shıǵıw quralları

### Kompilyator
TypeScript-tiń tsc dep atalatuǵın kompilyatorı TypeScript tilinde jazılǵan. Nátiyjesinde onı ápiwayı JavaScript-ke kompilyaciyalawǵa boladı hám onnan keyin hár qanday JavaScriptte (mısalı, brauzerde) orınlawǵa boladı. Kompilyator paketi kompilyatordı orınlay alatuǵın skript xostı menen paydalanatuǵın Node.js paketi retinde de bar. 

## Sonday-aq qarań:

* Dart
* Kotlin
* JS++
* PureScript

## Derekler

### Citatalar

## Sırtqı siltemeler

* TypeScript project at GitHub
* TypeScript Language Specification
* CATS Cross Platform TypeScript Editor
* The Concise TypeScript Book
* TypeScript Origins: The Documentary on YouTube