📄️ Perustietotyypit
Monet TypeScriptin oppaat keskittyvät omien tyyppien määrittelyyn, mutta alkuun pääsemiseksi on hyvä perehtyä TypeScriptin valmiisiin perustietotyyppeihin kuten string, number ja boolean. Perustietotyypit on dokumentoitu selkeästi TypeScript-käsikirjan luvussa Everyday Types ja olemme koonneet tiivistelmän aiheesta myös tälle sivulle.
📄️ Type ja interface
Edellisissä kappaleissa olemme perehtyneet siihen, miten TypeScriptillä voidaan määritellä eri muuttujille ja funktioille JavaScriptin perustietotyyppejä kuten string ja number. TypeScriptistä on kuitenkin vielä huomattavasti enemmän hyötyä silloin, kun omassa ohjelmalogiikassa hyödynnetään monipuolisesti omia ja eri kirjastoista löytyviä tietotyyppejä.
📄️ Keyof ja typeof
TypeScript osaa ilmaista tyyppejä monipuolisesti olemassa olevien arvojen ja tyyppien avulla. Mikäli ohjelmakoodissa on olemassa jo jokin vakioarvo, sen tyypistä voidaan muodostaa kätevästi uudelleenkäytettävä alias typeof-operaattorilla. Toisaalta keyof-operaattorilla voit muodostaa unionin minkä tahansa tyypin avaimista.
📄️ Geneeriset tyypit
TypeScript tukee geneerisiä tyyppejä (generics) niin tyyppien määrityksissä kuin esimerkiksi funktioiden parametreissa ja paluuarvoissa. Lyhyesti kuvailtuna geneeriset tyypit edesauttavat koodin uudelleenkäytettävyyttä tilanteissa, joissa sama funktio tai tyyppi voi käsitellä monen tyyppistä dataa.
📄️ Tyyppien unionit ja leikkaukset
TypeScriptissä eri tyyppejä voidaan ilmaista joukko-opin termien mukaisesti unioneilla (union) ja leikkauksilla (intersection). Unionin tapauksessa tyyppi käsittää ikään kuin vaihtehtoisia toisistaan erillisiä tyyppejä. Leikkaus puolestaan määrittelee tyypin, joka täyttää molempien siihen kuuluvien tyyppien piirteet.
📄️ Map-tyypit (mapped types)
JavaScriptissä olioita (object) käytetään usein avain-arvo-pareja sisältävänä map-tietorakenteena, esimerkiksi seuraavasti:
📄️ Tyyppivahdit ja -predikaatit
Erilaiset tyyppien tarkastukset ovat TypeScriptissä varsin yleisiä. Tarkastuksia, jotka rajaavat esimerkiksi unionityypin mahdollisia arvoja ohjelmakoodissa kutsutaan tyyppivahdeiksi (type guard). Usein tyyppien tarkastamista joudutaan tekemään niin usein, että tarkastusta varten kannattaa toteuttaa myös erillinen predikaattifunktio (type predicate).
📄️ Aputyypit
Kuten aikaisemmin käsitellyt unionit ja leikkaukset sekä typeof ja keyof ovat osoittaneet, uusia tyyppejä voidaan ilmaista monipuolisesti olemassa olevia tyyppejä hyödyntämällä.
📄️ JavaScript-koodin tyyppimäärittelyt
TypeScriptillä kirjoittamasi ohjelmat hyödyntävät tyypillisesti erilaisia kirjastoja, jotka saattavat olla alun perin JavaScriptillä toteutettuja. Esimerkiksi suosittu react-kirjasto on toteutettu JavaScriptillä, mutta sitä käytetään laajasti TypeScript-projekteissa.