TypeScript

Linux.fista
Siirry navigaatioon Siirry hakuun
Linux.fi-wikissä artikkelit käsittelevät yleensä aihettaan siltä osin, kuin se koskee Linuxia ja avoimia/vapaita ohjelmistoja. Yleisluontoisemman artikkelin tästä aiheesta löydät tietosanakirja Wikipediasta.
TypeScript
Paradigma Moniparadigmainen
Tyypitys Vahva, staattinen
Evaluointitapa Laiska ja innokas
Suoritusmalli Käännetty (transpiloituu JavaScriptiksi), tulkattu ja ajonaikainen
Muistinhallinta Automaattinen
Tekijä(t) Anders Hejlsberg (Microsoft)
Kehittäjä(t) Microsoft
Moottori JavaScript-moottorit (esim. V8 (Chrome, Node.js), SpiderMonkey (Firefox))
Ensijulkaisu Lokakuu 2012
Käyttöliittymä Web-sovellukset, työpöytäsovellukset (Electron), mobiilisovellukset (React Native))
Tyyppi Transpiloituva kieli
Lisenssi Apache-lisenssi v2.0
Kotisivu typescriptlang.org
Lähdekoodi github.com/microsoft/TypeScript

TypeScript on ohjelmointikieli, joka on suunniteltu erityisesti suurten JavaScript-sovellusten kehittämiseen. Se on Microsoftin kehittämä ja ylläpitämä, avoimen lähdekoodin kieli.

TypeScriptin perusta

TypeScript tuo staattisen tyypityksen ja muita suurten sovellusten kehittämiseen soveltuvia ominaisuuksia JavaScriptin päälle. Se toimii Supersettinä JavaScriptille, eli jokainen validi JavaScript-koodi on myös validia TypeScript-koodia. Lopuksi se sitten transpiloituu tavalliseksi JavaScriptiksi, jota selaimet ja Node.js-ympäristöt ymmärtävät.

Tyypityksen ero: TypeScript vs. JavaScript

Tyypityksen ero on merkittävin virheiden havaitsemisessa jo kehitysvaiheessa verrattuna virheiden havaitsemiseen vasta ohjelman suoritusvaiheessa (runtime).

1. Dynaaminen Tyypitys (JavaScript)

  • JavaScript on dynaamisesti tyypitetty kieli. Muuttujien tyyppi tarkistetaan vasta suorituksen aikana.
  • Tämä voi johtaa piileviin virheisiin ja odottamattomaan tyyppipakkokeinoon (Type Coercion).

2. Staattinen Tyypitys (TypeScript)

  • TypeScript on staattisesti tyypitetty kieli. Muuttujien, funktioiden parametrien ja paluuarvojen tyypit tarkistetaan käännösaikana (compile-time).
  • Varhainen virheen havainnointi: Jos yrität syöttää funktioon vääräntyyppisen arvon (esim. merkkijonon numeron sijaan), TypeScriptin kääntäjä antaa virheilmoituksen heti kehitysvaiheessa. Tämä estää monia runtime-virheitä.

3. Tyyppipäättely ja Merkinnät

  • Valinnainen Tyyppimerkintä: Vaikka TypeScript on staattisesti tyypitetty, tyyppimerkinnät (: number, : string jne.) ovat usein valinnaisia.
  • Tyyppipäättely (Type Inference): Useimmissa tapauksissa TypeScript on riittävän älykäs päättelemään muuttujan tyypin sen arvon perusteella, vähentäen manuaalisen tyypityksen tarvetta.

4. Rakenteellinen Tyypitys (Structural Typing)

  • TypeScript käyttää rakenteellista tyypitystä (tunnetaan myös "duck typingina"), ei nimityypitystä. Tämä tarkoittaa, että tyyppien yhteensopivuus perustuu niiden rakenteeseen (eli niissä oleviin ominaisuuksiin ja metodeihin), ei niiden nimeen.
  • Sääntö: Jos tyypillä on sama rakenne kuin toisella tyypillä (eli sillä on kaikki samat pakolliset ominaisuudet), se on yhteensopiva sen kanssa.
  • Esimerkki: Jos sinulla on kaksi eri rajapintaa (interface), Henkilö ja Käyttäjä, mutta molemmilla on vain ominaisuus nimi: string, TypeScript pitää niitä yhteensopivina.
interface Henkilo {
    nimi: string;
}

interface Kayttaja {
    nimi: string;
}

// 🤝 TS sallii tämän, koska rakenteet ovat samat:
const a: Henkilo = { nimi: "Aada" };
const b: Kayttaja = a; // OK! Vaikka tyyppien nimet ovat eri.

Rakenteellinen tyypitys tekee TypeScriptin koodista joustavampaa ja tukee paremmin JavaScriptin luontaista, löysempää tapaa käyttää objekteja.