# TypeScript

TypeScript|  |
| --- |
| Տեսակ | ծրագրավորման լեզու, scripting language?, իմպերատիվ ծրագրավորման լեզու, ֆունկցիոնալ ծրագրավորման լեզու, միջոցառմամբ կողմնորոշվող ծրագրավորման լեզու, strict programming language?, բարձր մակարդակի ծրագրավորման լեզու և ազատ և բաց ծրագրային ապահովում |
| Առաջացել է | հոկտեմբերի 1, 2012 |
| Ստեղծող | Մայքրոսոֆթ |
| Նախագծող | Մայքրոսոֆթ |
| Ընդլայնումներ | `.ts` և `.tsx` |
| Ներշնչվել է | ՋավաՍկրիպտ, C Sharp, Ջավա և CoffeeScript |
| Արտոնագիր | Apache License 2.0 |
| Կայք | typescriptlang.org​(անգլ.) |
| Ելակոդ | github.com/Microsoft/TypeScript և github.com/microsoft/typescript-go |
|  TypeScript Վիքիպահեստում |

**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

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