28.9.2020 14:45

JavaScriptistä TypeScriptiin

Ihan heti alkuun henkilökohtainen tunnustus: en ole koskaan pitänyt tyypitetyistä kielistä. Tunnustan niiden edut monissa projekteissa, mutta en koskaan kokenut, että ne toisivat tarpeeksi lisäarvoa haittoihin verrattuna. Olin tehnyt vuosien varrella jonkin verran töitä ja projekteja monilla vahvasti tyypitetyillä kielillä (Java, C, jne), ja useimmiten koin tyypityksen tulevan lähinnä tielle.

Viimeiset 10 vuotta JavaScript on ollut pääasiallinen kehityskieleni ja siinä on ongelmansa, joista tehtyjen vitsien ja meemien määrä ylittää jo kaikki kyllästymisen rajat. Itse olen kuitenkin hyvin harvoin törmännyt suuriin ongelmiin tyypityksen osalta, joten en ollut kovin innokkaasti hyppäämässä TypeScriptin junaan. TypeScript on kuitenkin nostanut päätään myös Cinian projekteissa ja viime keväänä otin lopulta lapion kauniiseen käteen ja päätin katsoa, mistä tässä kaikessa kohkaamisessa oikein on kysymys.

Järjestystä kehityksen kaaokseen

JavaScript-ekosysteemi on kasvanut 20 vuoden aikana siihen pisteeseen, että sille on saatavissa kehittyneitä kehitysympäristöjä. JavaScriptin lähes kaaottinen tyyppimalli ei kuitenkaan ole kaikkein helpoimpia pähkinöitä purtavaksi kehityksen tueksi. Tämä oli yksi suurimpia motivaatioitani tarttua tähän haasteeseen. Lisäksi TypeScriptin ekosysteemi alkaa olla tarpeeksi kypsä kirjastotuen ja kääntötyökalujen osalta.

Tällä osa-alueella TypeScript on ollut todellinen ilo käyttää. Varsinkin Visual Studio Code tukee TypeScriptiä erinomaisesti ja alun ihmettelyn jälkeen kehitystyö on nopeutunut huomattavasti, koska objektien oikeat arvot ovat saatavilla suoraan IDE:stä ja funktioiden argumentit ovat kohdallaan.

Toisaalta yksi melko suuri miinus päivittäisessä käytössä kuitenkin on: TypeScriptin kääntämisen hitaus suhteessa normaalin Babel-kääntämiseen on asia joka aiheuttaa ärtymystä. Erityisesti yksikkötestien ajaminen aiheuttaa usein monenlaisia epätoivon parahduksia.

 

Coolit tyypit

TypeScriptin tyypit ovat selkein, helppokäyttöisin ja vähiten tielle tuleva tyyppijärjestelmä, jota olen urallani käyttänyt. Tämä ei tarkoita ”any” -tyypin käyttämistä. Perustyyppejä ei ole montaa ja ne ovat nopeasti omaksuttavissa. Tyyppien yhdistely tuottaa dynaamisesta kielestä tulevalle kehittäjälle melkoista mielenrauhaa, koska aivan kaikkia hyväksi havaittuja toimintatapoja ei tarvitse heti hylätä.

JavaScript vs TypeScript ruudunkaappaus

Interfacejen kirjoittamisesta on tullut oleellinen osa projektin kulkua, kun mietitään datan perusrakennetta sen mallintamisen kannalta. Ne auttavat pitämään projektin paremmin kasassa koodipohjan laajentuessa ja rekfaktorointi on huomattavasti vähemmän riskialtista touhua. Toisaalta tähän vaiheeseen on myös hyvin helppo jäädä jumiin viilaamaan kaikkea mahdollista, mitä kyseinen objekti voisi varsinaisen projektin aikana tarvita, eli itsekuria tarvitaan täälläkin, vaikkakin eri muodossa. Joskus interfacejen kirjoittaminen tuntuu myös melkoisen turhalta, jos kyse on täysin kertaluonteisesta tarpeesta.

 

Jäärän uudet aatteet?

Kaikki työ- ja harrasteprojektit, joita olen viimeisen neljän kuukauden aikana aloittanut, olen nyt tehnyt TypeScriptillä ja uskon suunnan jatkuvan myös tulevaisuudessa. Pienissä harrasteprojekteissa TypeScript auttaa jäsentämään tietoa ja suuremmissa projekteissa tyypityksen tuoma turva projektin edetessä on lähes korvaamaton apu. En kuitenkaan näe mitenkään mahdottomana itselleni henkilökohtaisesti, että palaisin takaisin JavaScriptin pariin myöhemmin, koska sillä kehittäminen on todella nopeaa, erityisesti projektin alkuvaiheessa tai kevyitä kokeiluja tehdessä. Lisäksi JS on toiminut itselläni paremmin funktioden kirjoittamisessa eri pilvialustoille.

Tämän kokeilun jälkeen suhteeni vahvaan tyypitykseen on muuttunut jonkin verran ja voin nyt allekirjoittaa sen edut myös JS-maailmassa. Javan tyypitys on silti itselleni edelleen sellainen hirviö, jonka kimppuun en kovin mielelläni käy tulevaisuudessakaan. Ennen kaikkea viime kuukaudet ovat kuitenkin muuttaneet suhtautumistani dynaamiseen tyypitykseen, eikä suinkaan negatiivisesti.

Jos tyypitys olisi urheiluauto moottoriradalla, niin vahva tyypitys olisi autossa oleva ajovakauden hallintajärjestelmä, joka estää kuskia ajamasta pöpelikköön, rikkoen samalla itsensä ja ajokkinsa. Mutta mikäli kuljettaja on tarpeeksi taitava ja kokenut, on ajaminen ilman apujärjestelmiä todella paljon hauskempaa ja nopeampaa.

 

Katso avoimet työpaikkamme

avatar

Henrik Collin

Software Architect Henrik Collin on pitkän linjan front end -arkkitehti ja ohjelmistoalan moniosaaja. Hänellä on parinkymmenen vuoden kokemus front end -kehitystyöstä, lisäksi hän työskentelee ahkerasti myynnin parissa.

Sinua voisi kiinnostaa