Ero sivun ”TypeScript” versioiden välillä

Siirry navigaatioon Siirry hakuun
pEi muokkausyhteenvetoa
Merkkaukset: Mobiilimuokkaus mobiilisivusto-muokkaus
p typo
 
(7 välissä olevaa versiota samalta käyttäjältä ei näytetä)
Rivi 1: Rivi 1:
{{Perustietoa}}
{{Perustietoa}}
{{Ohjelmointikieli
| nimi            = TypeScript
| logo            =
| paradigma      = Moniparadigmainen
| tyypitys        = Vahva, staattinen
| evaluointitapa  = Laiska ja innokas
| suoritusmalli  = Käännetty (transpiloituu JavaScriptiksi), tulkattu ja ajonaikainen
| muistinhallinta = Automaattinen
| tekijä          = Anders Hejlsberg (Microsoft)
| kehittäjä      = [[Microsoft]]
| moottori        = JavaScript-moottorit (esim. [[V8]] ([[Chrome]], [[Node.js]]), [[SpiderMonkey]] (Firefox))
| ensijulkaisu    = Lokakuu 2012
| vakaaversio    =
| vakaapvm        =
| kehitysversio  =
| kehityspvm      =
| ohjelmoitu      =
| käyttöliittymä  = Web-sovellukset, työpöytäsovellukset ([[Electron]]), mobiilisovellukset ([[React]] Native))
| tyyppi          = Transpiloituva kieli
| lisenssi        = [[Apache-lisenssi v2.0]]
| kotisivu        = [https://www.typescriptlang.org/ typescriptlang.org]
| lähdekoodi      = [https://github.com/microsoft/TypeScript github.com/microsoft/TypeScript]
}}
'''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 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 [[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 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.
 
<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