Ero sivun ”TypeScript” versioiden välillä
Siirry navigaatioon
Siirry hakuun
tekstin muotoilua |
|||
| Rivi 42: | Rivi 42: | ||
* Valinnainen Tyyppimerkintä: Vaikka TypeScript on staattisesti tyypitetty, tyyppimerkinnät ('': number'', '': 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, vähentäen manuaalisen tyypityksen tarvetta. | * 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. | |||