Ero sivun ”TypeScript” versioiden välillä
Siirry navigaatioon
Siirry hakuun
malline |
p typo |
||
| (5 välissä olevaa versiota samalta käyttäjältä ei näytetä) | |||
| Rivi 10: | Rivi 10: | ||
| tekijä = Anders Hejlsberg (Microsoft) | | tekijä = Anders Hejlsberg (Microsoft) | ||
| kehittäjä = [[Microsoft]] | | kehittäjä = [[Microsoft]] | ||
| moottori = JavaScript-moottorit (esim. V8 (Chrome, Node.js), SpiderMonkey (Firefox)) | | moottori = JavaScript-moottorit (esim. [[V8]] ([[Chrome]], [[Node.js]]), [[SpiderMonkey]] (Firefox)) | ||
| ensijulkaisu = Lokakuu 2012 | | ensijulkaisu = Lokakuu 2012 | ||
| vakaaversio = | | vakaaversio = | ||
| Rivi 17: | Rivi 17: | ||
| kehityspvm = | | kehityspvm = | ||
| ohjelmoitu = | | ohjelmoitu = | ||
| käyttöliittymä = Web-sovellukset, työpöytäsovellukset (Electron), mobiilisovellukset (React Native)) | | käyttöliittymä = Web-sovellukset, työpöytäsovellukset ([[Electron]]), mobiilisovellukset ([[React]] Native)) | ||
| tyyppi = Transpiloituva kieli | | tyyppi = Transpiloituva kieli | ||
| lisenssi = [[Apache | | lisenssi = [[Apache-lisenssi v2.0]] | ||
| kotisivu = [https://www.typescriptlang.org/ typescriptlang.org] | | kotisivu = [https://www.typescriptlang.org/ typescriptlang.org] | ||
| lähdekoodi = [https://github.com/microsoft/TypeScript github.com/microsoft/TypeScript] | | 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. | |||