# Mis on TypeScript? Algaja juhend JavaScripti supersetile

TypeScriptil on mitmeid olulisi omadusi, mis parandavad oluliselt **veebirakenduste arendamist**. Käesolev TypeScripti õpetus annab ülevaate programmeerimiskeelest ning selgitab selle olulisemaid omadusi ja kasutusvõimalusi, samuti eeliseid ja puudusi.

## Mis on TypeScript?

TypeScript on välja töötatud Microsofti poolt ja põhineb programmeerimiskeelel JavaScript, mida kasutatakse laialdaselt veebiarenduses. Üks TypeScripti silmapaistev omadus on **staatiline tüüpimine**. Erinevalt dünaamiliselt tüüpivast JavaScriptist võimaldab TypeScript deklareerida muutujate, funktsioonide ja parameetrite andmetüübid. See võimaldab varakult avastada kodeerimisvigu, mistõttu on võimalik tuvastada vead juba enne koodi täitmist. Staatiline tüüpimine parandab oluliselt mitte ainult koodi kvaliteeti, vaid ka koodi loetavust.

TypeScripti süntaks on peaaegu identne JavaScriptiga, mis muudab selle integreerimise olemasolevatesse JavaScripti projektidesse palju lihtsamaks. Tegelikult **on TypeScript JavaScripti ülemhulk**, mis tähendab, et iga korrektne JavaScripti kood on ka kehtiv TypeScripti kood. See võimaldab teil järk-järgult üle minna TypeScriptile ja saada kasu staatilise tüüpimise ja muude funktsioonide eelistest, ilma et peaksite olemasolevat koodibaasi täielikult ümber kirjutama.

Siin on lihtne JavaScripti näide:

```javascript
function greet(name) {
    return "Hello, " + name;
}
console.log(greet(123)); // Output: "Hello, 123"
```

Eespool toodud koodis ei ole funktsioon `greet` piiratud konkreetse andmetüübiga parameetri `name` jaoks. See tähendab, et funktsioon töötab ka siis, kui me edastame argumendina numbri.

TypeScriptis võib kood välja näha järgmine:

```typescript
function greet(name: string): string {
    return "Hello, " + name;
}
console.log(greet(123)); // Error in TypeScript
```

Siin oleme deklareerinud parameetri `name` stringina. Kui proovime funktsiooni kasutada numbriga, kuvab TypeScript vea, kuna edastatud andmetüüp ei vasta oodatavale andmetüübile.

See näide näitab, kuidas TypeScript aitab varakult vigu avastada, parandades koodi kvaliteeti ja vältides **andmetüüpide väärkasutust**. Oluline on märkida, et TypeScript kompileeritakse lõpuks JavaScriptiks, mis võimaldab seda käitada mis tahes JavaScripti keskkonnas. See tähendab aga, et tüübikindluse eeliseid saab kasutada ainult arendusfaasis.

## Milleks kasutatakse TypeScripti?

TypeScript on oluline mitmesugustes tarkvaraarenduse valdkondades, eriti olukordades, kus **tüübikindlus** ja koodi kvaliteet on otsustava tähtsusega.

TypeScripti üks silmapaistev kasutusala on veebiarendus. Siin tagab TypeScript, et JavaScripti kood on kirjutatud viisil, mis muudab selle turvalisemaks ja hoolduseks lihtsamaks. See on kasulik ulatuslikes frontend-projektides, kus on keerulised koodibaasid. TypeScripti saab aga rakendada ka **serveri poolel (backend) Node.js-rakendustes**, et pakkuda täiendavat turvatasandit. Serverita arhitektuurides, nagu AWS Lambda ja Azure Functions, aitab TypeScript vähendada vigu ja tagada usaldusväärse täitmise.

Platvormiülene arendus on veel üks valdkond, kus TypeScript näitab oma tugevusi. See võib oluliselt optimeerida **platvormiüleseid rakendusi ja mobiilirakenduste arendamist**. Raamistikud nagu NativeScript ja React Native pakuvad TypeScripti tuge erinevate platvormide mobiilirakenduste programmeerimisel. Mängude arendamisel kasutatakse TypeScripti projektides, mis kasutavad WebGL-i või mängumootoreid nagu Phaser või Babylon.js. TypeScripti tüübikindlus aitab parandada mängude kvaliteeti ja hooldatavust.

TypeScripti kasutatakse ka **andmete visualiseerimise ja analüüsi projektides**. Raamatukogud nagu D3.js pakuvad TypeScripti jaoks tuge ning võimaldavad luua keerukaid juhtpaneele ja visualiseeringuid.

## Kuidas installida TypeScript

TypeScripti installimine on lihtne ja võtab vaid paar sammu. Kui teie arvutis on **Node.js**, saate TypeScripti installida `npm` (Node Package Manager) abil.

### 1. samm: Lae alla Node.js

Kontrollige, kas teie arvutisse on installitud Node.js. Kui te pole Node.js veel installinud, saate selle alla laadida ja installida ametlikult veebisaidilt.

### 2. samm: Paigalda TypeScript terminali

Ava **käsureaaken** (nt käsureaaken Windowsis või terminal macOS-is või Linuxis) ja sisesta järgmine käsk, et installida TypeScript globaalselt:

```bash
npm install -g typescript
```

`-g` (globaalne) lipuke installib TypeScripti kogu süsteemi, nii et saate seda kasutada kõikjal.

### 3. samm: Kontrollige installitud versiooni

Saate kontrollida, kas installimine õnnestus, käivitades järgmise käsu:

```bash
tsc -v
```

See käsk näitab, milline TypeScripti versioon on installitud. Kui **versiooni number** kuvatakse, tähendab see, et installimine õnnestus.

Pärast installimist saate luua **JavaScript-faile**, luues TypeScript-faile (laiendiga *.ts*) ja kompileerides need TypeScript-kompilaatoriga `tsc`.

### 4. samm: Loo TypeScript-fail

Loo TypeScript-fail, nt *app.ts*, ja sisesta sinna oma TypeScript-kood.

```typescript
type Person = { name: string, age: number };
const alice: Person = { name: "Alice", age: 30 };
console.log(`Hello, I am ${alice.name} and I am ${alice.age} years old.`);
```

### 5. samm: Kompileeri fail

Kompileerige TypeScript-fail, sisestades järgmise käsu:

```bash
tsc app.ts
```

See kompileerib *app.ts* JavaScript-failiks nimega *app.js*. Seejärel saate JavaScript-faili käivitada.

## Millised omadused on TypeScriptil?

Veebiarendus on viimastel aastatel teinud märkimisväärseid edusamme ja TypeScript on kujunenud äärmiselt **tõhusaks alternatiiviks JavaScriptile**. Allpool oleme kokku võtnud selle keele olulisemad omadused.

### Staatiline tüüpimine

Staatiline tüüpimine on TypeScripti oluline omadus, mis võimaldab määrata muutujate, parameetrite, funktsioonide ja muude koodielementide andmetüübid. Erinevalt **JavaScripti dünaamilisest tüüpimisest**, kus andmetüübid määratakse kindlaks käivitamise ajal, määratakse TypeScriptis andmetüübid kindlaks arendamise ajal enne koodi käivitamist. See meetod aitab varakult tuvastada vigu ja loogilisi probleeme.

```typescript
function add(a: number, b: number): number {
    return a + b;
}
const result = add(5, 3); // valid
const result = add(5, "3"); // Type Error
```

Selles näites kasutasime funktsiooni `add` jaoks staatilist tüüpimist. Kaks parameetrit `a` ja `b` on deklareeritud numbritena (`number`) ja funktsioon tagastab tüübi `number` väärtuse. Iga katse kasutada seda funktsiooni teise andmetüübiga põhjustab TypeScriptis vea.

### Valikuline kirjutamine

Valikulise tüüpimise abil on teil võimalik määrata teatud muutujate ja parameetrite andmetüübid, jättes teised määratlemata andmetüübiga.

```typescript
function sayHello(name: string, age: any): string {
    if (age) {
        return `Hello, ${name}, you are ${age} years old.`;
    } else {
        return `Hello, ${name}.`;
    }
}
```

Funktsioon `sayHello` on defineeritud parameetritega `name` ja `age`. Märge `any` näitab, et parameeter `age` võib olla mis tahes andmetüüp.

### ES6+ funktsioonid

TypeScript toetab kaasaegseid JavaScripti funktsioone, sealhulgas ES6 ja uuemaid funktsioone, nagu **noolefunktsioonid ja mallistringid**.

```typescript
const multiply = (a: number, b: number): number => a * b;
const greeting = (name: string) => `Hello, ${name}!`;
```

Noolefunktsioonid muudavad süntaksi lühemaks ja lakoonilisemaks.

### Koodi korraldus

TypeScript pakub paremat koodi organiseerimist ja tagab, et kood jaguneb taaskasutatavateks osadeks. See on võimalik tänu moodulitele ja nimeruumi.

```typescript
// Math.ts
export function add(a: number, b: number): number {
    return a + b;
}
// Main.ts
import { add } from './Math';
const result = add(5, 3);
```

Siin näitame, kuidas struktureerida koodi moodulitega ja kasutada `import` ja `export` organiseerimiseks. Lisamise funktsioon on defineeritud eraldi moodulis nimega `Math.ts` ja seejärel imporditud ja integreeritud teise moodulisse, `Main.ts`.

### Objektorienteeritud programmeerimine (OOP)

TypeScript hõlbustab objektorienteeritud programmeerimist [TypeScripti klasside](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/typescripti-klassid/), liideste ja pärimise abil:

```typescript
class Person {
    constructor(public name: string, public age: number) {}
    greet() {
        console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
    }
}
const person = new Person("Alice", 30);
person.greet();
```

See näide näitab klasside ja objektorienteeritud programmeerimise (OOP) kasutamist TypeScriptis. Klassil `Person` on omadused `name`, `age` ja meetod `greet`, mida kasutatakse isiku tutvustamiseks ja tema kohta teabe andmiseks.

### Laiendatud tüübisüsteem

TypeScripti tüübisüsteem on paindlik ja ulatuslik. Saate luua **kasutaja määratud tüüpe ja liideseid** ning isegi laiendada olemasolevaid tüüpe.

```typescript
interface Animal {
    name: string;
}
 
interface Dog extends Animal {
    breed: string;
}
const myDog: Dog = { name: "Buddy", breed: "Labrador" };
```

Liides `Animal` määratleb omaduse `name`, samas kui liides `Dog` pärineb liidesest `Animal` ja lisab täiendava omaduse `breed`. Objektil `myDog` on mõlema liidese omadused.

### Ühilduvus JavaScriptiga

TypeScript on JavaScriptiga ühilduv, mis võimaldab seda kasutada igas JavaScripti keskkonnas. See ühilduvus muudab TypeScripti järkjärgulise lisamise praegustesse JavaScripti projektidesse lihtsamaks.

```typescript
// JavaScript-Code
function greet(name) {
    return "Hello, " + name;
}
// TypeScript-Code
function greet(name: string): string {
    return "Hello, " + name;
}
```

Eespool toodud JavaScripti koodi (ilma tüüpide määratlemiseta) saab probleemideta kasutada TypeScripti koodis (tüüpide määratlemisega).

## Millised on TypeScripti eelised ja puudused?

Kuigi TypeScript pakub mitmeid eeliseid, on sellel ka mõned puudused. Siin on ülevaade:

### Eelised

TypeScriptil on ulatuslik tüübidefinitsioonide ökosüsteem paljude JavaScripti raamatukogude ja raamistike jaoks. See muudab kolmandate osapoolte koodi integreerimise TypeScripti projektidesse sujuvaks ja lihtsaks. See on kasulik tänapäeva veebipõhiste rakenduste maailmas, mis tuginevad sageli mitmetele raamatukogudele ja raamistikutele.

Lisaks staatilisele tüüpimisele pakub TypeScript mitmeid arendusfunktsioone, sealhulgas liideseid, klasse, mooduleid ja **toetust kehtivatele ECMAScripti standarditele**. Need funktsioonid parandavad koodi struktureerimist, hõlbustavad projektide hooldatavust ja skaleeritavust ning edendavad arendustöö produktiivsust. Paljud integreeritud arenduskeskkondad (IDE), nagu Visual Studio Code, pakuvad TypeScriptile suurepärast tuge.

### Puudused

**TypeScriptiga harjumiseks kulub aega**, eriti arendajatel, kes on enne seda kasutanud ainult JavaScripti. TypeScripti kood tuleb enne brauserites või Node.js-keskkonnas käivitamist kompileerida JavaScriptiks. See lisab arendusprotsessi ühe lisasammu.

Väiksemate projektide puhul võib TypeScript tunduda liiga keeruline, kuna tüübikindluse eelised ei pruugi olla nii ilmsed. TypeScripti projektid võivad nõuda **rohkem ressursse täiendava tüübiinfo ja kompileerimisetappide tõttu**.

## Millised on TypeScripti alternatiivid?

Sõltuvalt projekti konkreetsetest nõuetest ja arendaja(te) eelistustest on olemas mitmesuguseid veebiprogrammeerimiskeeli, mis võivad olla heaks alternatiiviks TypeScriptile.

- **Flow**: Flow on Facebooki poolt arendatud JavaScripti staatiline tüübikontrollija. See võimaldab lisada JavaScripti koodile tüüpe, ilma et oleks vaja täielikult üle minna TypeScriptile. Flow on hea valik, kui soovite tüüpimist järk-järgult oma JavaScripti projektidesse integreerida.
- **Dart**: see on Google’i poolt arendatud programmeerimiskeel, mida saab kasutada veebirakenduste ja mobiilirakenduste loomiseks. See pakub tüübikindlust ja head jõudlust. Dart’i kasutatakse sageli koos Flutteri raamistikuga mobiilirakenduste arendamiseks.
- **PureScript**: PureScript on tugevalt tüübitav funktsionaalne programmeerimiskeel, mis pakub tugevat tüübikindlust ja puhtalt funktsionaalset programmeerimisstiili. See võimaldab importida JavaScripti raamatukogusid.
- **Elm**: Elm on funktsionaalne, tugevalt tüübiturvaline keel, mis on loodud veebirakenduste arendamiseks. Elm edendab Elm Architecture põhimõtet ja pakub kõrget tüübiturvalisust.
- **ReasonML (BuckleScript)**: see keel on arendatud Facebooki poolt ja põhineb OCaml-il. BuckleScript on kompilaator, mis kompileerib ReasonML-i JavaScriptiks. See võimaldab ka tüübikindlust ja on lihtne integreerida Reactiga frontend-arendamiseks.

Tip Meie digitaalses juhendis käsitletakse põhjalikumalt muid teemasid, nagu [TypeScripti funktsioonid](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/typescripti-funktsioonid/) ja [TypeScripti massiivid.](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/typescripti-massiivid/)


This is a markdown version of: [https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/mis-on-typescript/](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/mis-on-typescript/) for AI/LLM consumption.