**TypeScript** on vabavaraline programmeerimiskeel, mida arendab Microsoft. TypeScript võimaldab lisada staatilist tüübikirjeldust. TypeScripti võib kasutada nii kliendi- kui ka serveripoolsete (Node.js) JavaScripti rakenduste loomiseks.

TypeScript on loodud suurte rakenduste loomiseks ning kompileerub JavaScriptiks. Kuna JavaScript on TypeScripti alamhulk, on kõik olemasolevad valiidsed JavaScript programmid ühtlasi ka valiidsed TypeScripti programmid.

Ajalugu
-------

TypeScript sai avalikuks 2012. aasta oktoobris, kaks aastat pärast Microsofti enda sisemist arendust. Aastast 2013 toetavad TypeScripti peale Microsoft Visual Studio ka teised IDEsid, kuhu kuulvad näiteks Eclipse, Emacs, Vim, Sublime, Webstorm ja Atonit.

2014. aasta juunis teatas arendustiim uuest kompilaatorist, mis oli jõudluse poolest 5 korda efektiivsem.

2016. aasta septembris väljastati TypeScript 2.0, mis võimaldas arendajatel valikuliselt ennetada muutujate `null` väärtust.

Keele disain
------------

TypeScript loodi tulenevalt JavaScripti puudustest, mis tekkisid suurte rakenduste loomisel Microsoftis. Eesmärk oli luua lahedus, mis oleks ühilduv ning töötaks igal platvormil.

TypeScript vastab kõikidele ECMAScript 2015 standarditele, võimaldades seejuures luua klasse, mooduleid ning kasutada noolefunktsioone.

TypeScriptiga on võimalik kasutada olemasolevat JavaScripti koodi ning muuta see turvalisemaks, annoteerides muutujate tüüpe. Lisada on võimalik ka olemasolevaid JavaScripti teeke, aga arvestama peab sellega, et need tuleb annoteerida. Mõnikord on võimalik installida ka olemasolevaid tüübideklaratsioone, kuid nende puudumisel tuleb programmeerijal need ise kirjutada.

Tüübikirjeldused
----------------

TypeScript võimaldab staatilist tüübikirjeldust, annoteerides muutujate tüüpe. Tüübikontroll viiakse läbi kompileerimisajal. Tüübikirjeldus on valikuline, mis tähendab, et kõiki tüüpe ei pea määrama (erinevalt Javast) ning lubatud on kirjutada ka tavalist JavaScripti.

```
function liida(vasak: number, parem: number): number 
{
	return vasak + parem;
}

```
Primitiivsed annoteerimistüübid on number (`number`) , tõeväärtus (`boolean`) ja sõne (`string`).

Deklaratsiooni failid
---------------------

TypeScripti kompileerimise ajal on võimalik genereerida deklaratsiooni faile (laiendiga .d.ts), mis on liideseks komponendile, mille kompileerib JavaScript. Selle käigus viskab kompailer ära kõik funktsioonide ja meetodite kehad, jättes alles ainult signatuurid.

```
declare module aritmeetika {
    liida(vasak: number, parem: number): number;
    lahuta(vasak: number, parem: number): number;
    korruta(vasak: number, parem: number): number;
    jaga(vasak: number, parem: number): number;
}

```

Klassid
-------

TypeScript toetab ECMAScript 2015 klasse, millele on võimalik lisada ka tüüpe:

```
class Isik {
    private nimi: string;
    private vanus: number;
    private palk: number;

    constructor(nimi: string, vanus: number, palk: number) {
        this.nimi = nimi;
        this.vanus = vanus;
        this.palk = palk;
    }

    toString(): string {
        return `${this.nimi} (${this.vanus}) (${this.palk})`; // Versioon 1.4
    }
}

```

Viited
------

1. ↑  Jackson, Joab (1. oktoober 2012). "Microsoft Augments Javascript for Large-scale Development". *CIO*. IDG Enterprise. Originaali arhiivikoopia seisuga 13. detsember 2017. Vaadatud 26. aprillil 2015.
2. ↑  InfoWorld (1. oktoober 2012). "Microsoft augments JavaScript for large-scale development". *InfoWorld*. Vaadatud 26. aprillil 2015.
3. ↑  Turner, Jonathan (2. aprill 2014). "Announcing TypeScript 1.0". *TypeScript Language team blog*. Vaadatud 26. aprillil 2015.
4. ↑  "TypeScript". *Eclipse Marketplace*. Eclipse Foundation. Originaali arhiivikoopia seisuga 10. oktoober 2018. Vaadatud 26. aprillil 2015.
5. ↑  Jackson, Joab (25. veebruar 2014). "Microsoft TypeScript graduates to Visual Studio". *PC World. IDG*. Vaadatud 26. aprillil 2015.
6. ↑  Anders Hejlsberg (5. oktoober 2012). "What is TypeScript and why with Anders Hejlsberg". *www.hanselminutes.com*. Vaadatud 15. jaanuaril 2015.