TypeScript

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

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

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

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

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

Թողարկման ժամանակ ներկայացվեց 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-ի ընդլայնված լեզուն է։ Ավելացված են հետևյալ հնարավորությունները․
  և նրանց համաձայնության ստուգում
 Դասեր
 Ինտերֆեյս
 Թվարկված տեսակներ
 Միքսիններ
 Ընդհանուր ծրագրավորում
 Մոդուլներ
 Անանուն ֆունկցիաների շարահյուսության կրճատում
 Լրացուցիչ պարամետրեր և կանխադրված պարամետրեր
 Կորտեժներ։

Շարահյուսությամբ 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

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

2012 մշակված ծրագրային ապահովում