Ero sivun ”TypeScript” versioiden välillä
Siirry navigaatioon
Siirry hakuun
Ak: Uusi sivu: {{Perustietoa}} '''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. Merkkaukset: Mobiilimuokkaus mobiilisivusto-muokkaus |
p typo |
||
| (8 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. | |||
''' | == 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. | |||