**TypeScript**, ծրագրավորման լեզու, որը 2012 թվականին ներկայացրել է Մայքրոսոֆթ ընկերությունը որպես ցանցի կիրառական ծրագրերի մշակման միջավայր՝ ընդլայնված JavaScript-ի հնարավորություններով։

TypeScript լեզվի ստեղծողը համարվում է Անդերս Հեյլսբերգը (անգլ.՝ Anders Hejlsberg), որը նախկինում ստեղծել է նաև Turbo Pascal, Delphi և C# լեզուները։

Լեզվի առանձնահատկությունը համարվում է Open Web Foundation Specification Agreement (OWFa 1.0) համաձայնագրի շրջանակներով բաց և հրապարակային թողարկումը։

TypeScript-ը համարվում է JavaScript-ի հետ համատեղելի։ Գործնականում, TypeScript ծրագրի կոմպիլացիայից հետո այն կարելի է գործարկել ցանկացած ցանցային դիտարկչում կամ օգտագործել համատեղ ցանցային Node.js հարթակում։

TypeScript-ը JavaScript-ից տարբերվում է բացահայտ[en] տիպավորման հնարավորությամբ, լիարժեք դասերի կիրառման աջակցությամբ (ինչպես այլ դասական օբյեկտ-կողմոնորոշված լեզուներում), ինչպես նաև մոդուլների միացման հնարավորությամբ, որը կոչված է աշխատանքի արագության բարձրացմանը, ընթերնելիության դյուրացմանը, կոդի կրկնվելու հնարավորությանը, մշակման և կոմպիլացման ընթացքում սխալների որոնմանը և ծրագրի աշխատանքի արագացմանը։

Թողարկման ժամանակ ներկայացվեց Vim և Emacs խմբագրիչների համար TypeScript-ի ընդլայնված շարահյուսության ֆայլեր, ինչպես նաև հավելված Microsoft Visual Studio-ի համար։

Լեզվի թողարկման հետ միաժամանակ մշակողները պատրաստել էին ստատիկ տեսակի ֆայլեր որոշ հայտնի գրադարանների, այդ թվում jQuery-ի համար։

Ստեղծում
--------

TypeScript-ը ստեղծվեց ինչպես Մայքրոսոֆթի, այնպես էլ այլ մեծամասշտաբ ծրագրերում JavaScript-ի կանխատեսվող բացթողումների համար։

TypeScript-ի ստեղծողները լուծում էին փնտրում, որը չէր խախտի առկա չափորոշիչները և նրա քրոսպլատֆորմ աջակցումը։ Իմանալով, որ միայն ECMAScript չափորոշիչներն են առաջարկում ծրագրավորման համար ապագա՝ դասերի բազայով (Class-based programming), TypeScript-ի հիմքում դրվեց հենց այդ վերափոխումը։ Դա բերեց սինտակտային լեզվային հավելվածների գործիքակազմով JavaScript կոմպիլյատորի ստեղծմանը, որն ավելացրեց հիմնական առաջարկները։ Այս պարագայում TypeScript-ը համարվում է այն, ինչը պետք էր սպասել ECMAScript 6-ից։ Լեզվի յուրօրինակ կողմը ոչ թե առաջարկներն են, այլ ստատիկ տիպավորման ավելացումը, որը թույլ է տալիս կատարել լեզվի ստատիկ վերլուծություն։

### ECMAScript 6 աջակցում

TypeScript-ն ավելացնում է հետևյալ ֆունկցիաների աջակցումը․ դասեր, սահմանված ֆունկցիաների (սահմանված ֆունկցիաներ) մոդուլներ և ֆունկցիաներ, ինչպես նրանք առաջարկված են եղել ECMAScript 6 չափորոշիչներով։

Լեզվի առանձնահատկություններ
---------------------------

TypeScript-ը ECMAScript 5-ի ընդլայնված լեզուն է։ Ավելացված են հետևյալ հնարավորությունները․

* Տիպերի նկարագրություն[en] և նրանց համաձայնության ստուգում
* Դասեր
* Ինտերֆեյս
* Թվարկված տեսակներ
* Միքսիններ
* Ընդհանուր ծրագրավորում
* Մոդուլներ
* Անանուն ֆունկցիաների շարահյուսության կրճատում
* Լրացուցիչ պարամետրեր և կանխադրված պարամետրեր
* Կորտեժներ։

Շարահյուսությամբ TypeScript-ը շատ նման է JScript .NET-ին, որը ECMA-262 լեզվային ստանդարտով Մայքրոսոֆթի հերթական արտադրանքն է ու ապահովում է ստատիկ տիպավորում և դասական օբյեկ-կողմոնորշված լեզվի հնարավորությունները, ինչպիսիք են դասերը, ժառանգումը, ինտերֆեյսը և անվանակարգումը։

### Համատեղելիությունը JavaScript-ի հետ

TypeScript լեզուն կարգավորվել է JavaScript-ով։ Ուստի JavaScript ծրագիրը նույնպես համարվում է TypeScript-ի ճիշտ ծրագիր, և TypeScript-ը կարող է արագ ներգրավել JavaScript կոդը։ TypeScript-ը կոմպիլացնում է ES3-ը։

TypeScript-ի հետ հնարավոր է օգտագործել JavaScript կոդ, որոնք ներառում են հայտնի գրադարանններ։

### Տեսակներ

TypeScript-ը հնարավորություն է տալիս սահմանել տեսակներ՝ նրանց դասավորության ստատիկ ստուգման համար։ Սակայն դա պարտադիր պայման չէ և JavaScript-ի սովորական դինամիկ տիպավորման համար կարելի է այն անտեսել՝

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

```

Պարզ տեսակի համար գոյություն ունի մի քանի նկարագրություն․ `number`, `boolean` և `string`։ Թույլ կամ դինամիկ մուտքագրման համար կառուցվածքն ունի `any` տեսակը։

Որոշակի տեսակներ կարող են փոխակերպվել կոնկրետ *հայտարարված ֆայլի*, որպեսզի տեսակի մասին տեղեկությունը դառնա առավել հասանելի արդեն կոմպիլացված JavaScript ծրագրերի տարբեր տեսակների օգտագործման դեպքում։ Սահմանումները կարող են կիրառվել գոյություն ունեցող JavaScript գրադարաններում, ինչպես դա արված է Node.js-ի և JQuery-ի համար։

JavaScript կոմպիլյատորը փորձում է դուրս բերել տեսակը, եթե այն հտակ սահմանված չէ։ Օրինակ վերևի կոդում `add` մեթոդի համար դուրս կբերվի `number`, եթե անգամ հստակ սահմանված չէ տեսակը։ Սա հիմնված է `left` և `right` `numbers` ստատիկ տիպերի վրա և կոմպիլյատորը «գիտակցում է», որ երկու `numbers` տիպերի ավելացումը միշտ `number` է։

Եթե տեսակը հնարավոր չէ դուրս բերել սահմանման բացակայության պատճառով, ապա որպես կանխադրված տեսակ կլինի դինամիկ `any` տեսակը։ `any` տեսակի արժեքը աջակցում է նույն այն գործողությունները, ինչ որ այդ արժեքը JavaScript-ում։

#### Հայտարարագրերի ֆայլեր

TypeScript սցենարի կոմպիլացման ժամանակ կա **հայտարարագրերի ֆայլեր** ստեղծելու հնարավորություն(`.d.ts`), որը JavaScript կոմպիլացման մեջ օգտագործվում է որպես բաղադրյալ-կողմոնորշված ծրագրավորման ինտերֆեյս։ Գործընթացի ընթացքում կոմպիլյատորը ջնջում է բոլոր ֆունկցիաները և մեթոդները և պահում է միայն տեսակների ստորագրությունները։

Հայտարարագրերի ֆայլի հայեցակարգը նման է C++ լեզվում գլխային ֆայլին (Include directive).

```
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-ի համար։ Հայտնի JavaScript գրադարանների հայտարարագրերի ֆայլերի մեծ հավաքածու կա GitHub borisyankov-ի DefinitelyTyped պահոցում։

### Դասեր

TypeScript-ը աջակցում է ECMAScript 6-ի դասեր, որը թույլ է տալիս կիրառել տեսակների սահմանում։

```
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 + ")";
 }
}

```

### Ձևանմուշներ

TypeScript-ը աջակցում է ընդհանուր ծրագրավորում։

Տես նաև
-------

* JavaScript
* ECMAScript
* CoffeeScript

Ծանոթագրություններ
------------------

1. ↑  The typescript Open Source Project on Open Hub: Licenses Page — 2006.
2. ↑  Anders Hejlsberg (2012 թ․ հոկտեմբերի 5). "What is TypeScript and why with Anders Hejlsberg". www.hanselminutes.com. Retrieved 2014 թ․ հունվարի 15.
3. ↑  S. Somasegar (2012 թ․ հոկտեմբերի 1). "TypeScript: JavaScript Development at Application Scale". msdn.com. Արխիվացված է the original 2015 թ․ ապրիլի 22-ին. Retrieved 2013 թ․ նոյեմբերի 27. `{{cite web}}`: Unknown parameter `|dead-url=` ignored (`|url-status=` suggested) (help)
4. ↑  Klint Finley (2012 թ․ հոկտեմբերի 1). "Microsoft Previews New JavaScript-Like Programming Language TypeScript". TechCrunch. Retrieved 2013 թ․ նոյեմբերի 27.
5. 1 2  Official TypeScript Home Page
6. ↑  TypeScript Language Specification p.24 Archived 2013-11-17 at the Wayback Machine.
7. ↑  Jonathan Turner (2013 թ․ հունիսի 18). "Announcing TypeScript 0.9". msdn.com. Արխիվացված է the original 2013 թ․ նոյեմբերի 26-ին. Retrieved 2013 թ․ նոյեմբերի 27. `{{cite web}}`: Unknown parameter `|dead-url=` ignored (`|url-status=` suggested) (help)