Ero sivun ”TypeScript” versioiden välillä

Siirry navigaatioon Siirry hakuun
pEi muokkausyhteenvetoa
p typo
 
(3 välissä olevaa versiota samalta käyttäjältä ei näytetä)
Rivi 25: Rivi 25:
'''TypeScript''' on ohjelmointikieli, joka on suunniteltu erityisesti suurten [[JavaScript]]-sovellusten kehittämiseen. Se on [[Microsoft]]in kehittämä ja ylläpitämä, avoimen lähdekoodin kieli.
'''TypeScript''' on ohjelmointikieli, joka on suunniteltu erityisesti suurten [[JavaScript]]-sovellusten kehittämiseen. Se on [[Microsoft]]in kehittämä ja ylläpitämä, avoimen lähdekoodin kieli.


Se 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.
== TypeScriptin perusta ==
TypeScript tuo staattisen tyypityksen ja muita suurten sovellusten kehittämiseen soveltuvia ominaisuuksia [[JavaScript]]in päälle. Se toimii Supersettinä JavaScriptille, eli jokainen validi JavaScript-koodi on myös validia TypeScript-koodia. Lopuksi se sitten transpiloituu tavalliseksi JavaScriptiksi, jota [[Verkkoselaimet|selaimet]] ja [[Node.js]]-ympäristöt ymmärtävät.


== Tyypityksen Ero: TypeScript vs. JavaScript ==
== Tyypityksen ero: TypeScript vs. JavaScript ==
Ero TypeScriptin ja JavaScriptin tyypityksen välillä on merkittävin virheiden havaitsemisessa jo kehitysvaiheessa (staattinen tyypitys) verrattuna virheiden havaitsemiseen vasta ohjelman suoritusvaiheessa (dynaaminen tyypitys).
Tyypityksen ero on merkittävin virheiden havaitsemisessa jo kehitysvaiheessa verrattuna virheiden havaitsemiseen vasta ohjelman suoritusvaiheessa (runtime).


TypeScriptin tyypitys eroaa JavaScriptistä seuraavin tavoin:
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).


A. Tyypitys
2. Staattinen Tyypitys (TypeScript)
* JavaScript on dynaamisesti tyypitetty kieli, mikä tarkoittaa, että muuttujien tyyppi tarkistetaan vasta suorituksen aikana.
* TypeScript on staattisesti tyypitetty kieli. Muuttujien, funktioiden parametrien ja paluuarvojen tyypit tarkistetaan käännösaikana (compile-time).
* TypeScript on staattisesti tyypitetty kieli: Muuttujien, funktioiden parametrien ja paluuarvojen tyypit tarkistetaan käännösaikana (compile-time) ennen kuin koodi edes alkaa suorittua.
* 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ä.
* Varhainen virheen havainnointi: Jos yrität syöttää funktioon merkkijonon, kun se odottaa numeroa, TypeScriptin kääntäjä antaa virheilmoituksen heti kehitysvaiheessa. Tämä estää monia suoritusajan (runtime) virheitä.


B. Valinnainen Tyyppimerkintä (Type Annotations)
3. Tyyppipäättely ja Merkinnät
* Valinnainen: Vaikka TypeScript on staattisesti tyypitetty, tyyppimerkinnät (''a: number'', ''b: string'' jne.) ovat usein valinnaisia.
* 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.
* 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.
 
<syntaxhighlight lang="TypeScript">
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.
</syntaxhighlight>
Rakenteellinen tyypitys tekee TypeScriptin koodista joustavampaa ja tukee paremmin JavaScriptin luontaista, löysempää tapaa käyttää objekteja.
Noudettu kohteesta ”https://www.linux.fi/wiki/TypeScript