TypeScript

**TypeScript** on vabavaraline programmeerimiskeel, mille töötas välja Anders Hejlsberg ning 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.
```typescript
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.
```typescript
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:
```typescript
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