Ty­peSc­ript-luokat tarjoavat selkeän ja jä­sen­nel­lyn tavan järjestää data ja käyt­täy­ty­mi­nen ob­jek­tis­sa. Tämä helpottaa en­ti­teet­tien ja kä­sit­tei­den mal­lin­ta­mis­ta koo­dis­sa­si.

Mitä ovat Ty­peSc­ript-luokat?

Luokat ovat keskeinen käsite Ty­peSc­ript-kielessä, joka on Ja­vaSc­ript-pohjainen oh­jel­moin­ti­kie­li. Luokat edustavat jä­sen­nel­tyä me­ne­tel­mää objektien mää­rit­te­le­mi­sek­si ja olio-oh­jel­moin­nin (OOP) so­vel­ta­mi­sek­si. Ty­peSc­ript-luokat ovat kuin suun­ni­tel­mia objektien luo­mi­sek­si, jotka kokoavat loo­gi­ses­ti toisiinsa liittyviä tietoja ja me­ne­tel­miä.

Ty­peSc­ript sisältää kaikki Ja­vaSc­rip­tin toiminnot ja lisäksi staat­ti­sen tyy­pi­tyk­sen. Tämän ansiosta voit määrittää Ty­peSc­ript-funk­tioi­den, muut­tu­jien ja luokkien tie­to­tyy­pit, jolloin voit havaita kom­pi­loin­nin aikaiset virheet. Tyyp­pi­tur­val­li­suu­den lisäksi Ty­peSc­ript-luokat tukevat myös perintää ja ab­strak­tio­ta, mikä helpottaa mo­ni­mut­kais­ten so­vel­lus­ten ke­hit­tä­mis­tä.

Ty­peSc­ript-luokkien avulla voit luoda selkeän luok­ka­hie­rar­kian, jossa luokat perivät omi­nai­suuk­sia ja metodeja. Tämä edistää koodin uu­del­leen­käyt­töä ja jä­sen­te­lyä. Luokkien kon­struk­to­rit mah­dol­lis­ta­vat ins­tans­sien alus­ta­mi­sen ja var­mis­ta­vat yh­den­mu­kai­sen objektien luomisen.

Mikä on Ty­peSc­ript-luokkien syntaksi?

Ty­peSc­ript-luokkien mer­kin­tä­ta­pa on sa­man­lai­nen kuin EC­MASc­ript 6:ssa (ES6) ja se on Ja­vaSc­ript-luok­ka­syn­taxin laa­jen­net­tu versio. Ty­peSc­ript-luokka voi sisältää erilaisia ele­ment­te­jä, joilla mää­ri­tel­lään objektien rakenne ja käyt­täy­ty­mi­nen. Tär­keim­mät kom­po­nen­tit ovat:

  • Omi­nai­suu­det
  • Ra­ken­ta­jat
  • Me­ne­tel­mät

Omi­nai­suu­det

Omi­nai­suu­det mää­rit­tä­vät objektin tilan. Ne tal­len­ta­vat data-arvoja ja niihin voidaan liittää da­ta­tyyp­pe­jä, jotta niillä on vain kel­vol­li­sia arvoja.

class ClassName {
    propertyName: propertyType;
}
ty­pesc­ript
  • ClassName: luokan nimi
  • pro­per­ty­Na­me: mää­ri­tel­tä­vän omi­nai­suu­den nimi
  • pro­per­ty­Ty­pe: omi­nai­suu­den tie­to­tyyp­pi

Tässä on konk­reet­ti­nen esimerkki:

class Person {
    name: string;
}
ty­pesc­ript

Ensin mää­ri­tel­lään Person -luokka, jolla on tyypin string omi­nai­suus name. Tämä tar­koit­taa, että Person -luokan ins­tans­seil­la on name -omi­nai­suus, joka tallentaa merk­ki­jo­no­ja.

Rakentaja

Ty­peSc­rip­tin kon­struk­to­ri on erityinen menetelmä, jota kutsutaan, kun luokan instanssi (objekti) luodaan. Sitä tarvitaan objektin omi­nai­suuk­sien alus­ta­mi­seen. Kon­struk­to­ri mää­rit­te­lee olen­nai­ses­ti ins­tans­sin alkutilan. Kon­struk­to­ris­sa voi määrittää pa­ra­met­re­ja, joilla vä­li­te­tään arvoja Ty­peSc­ript-luokkien ins­tan­soin­tia varten.

Ty­peSc­ript-kielessä kon­struk­to­rin pe­rus­ra­ken­te on seuraava:

class ClassName {
    constructor(parameter1: Type1, parameter2: Type2, ...) {
    }
}
ty­pesc­ript
  • kon­struk­to­ri: jo­kai­sel­la luokalla voi olla yksi kon­struk­to­ri. Jos kon­struk­to­ria ei ole mää­ri­tel­ty, luodaan ole­tusar­voi­ses­ti tyhjä kon­struk­to­ri.
  • parametri: Tyyppi: pa­ra­met­rit ovat va­lin­nai­sia, riippuen luokasta ja sen vaa­ti­muk­sis­ta. Pa­ra­met­rit tulisi merkitä niiden tie­to­tyy­peil­lä.

Esimerkki kon­struk­to­ris­ta:

class Person {
    firstName: string;
    lastName: string;
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
ty­pesc­ript

Yllä olevassa esi­mer­kis­sä luokalla Person on kon­struk­to­ri, joka hyväksyy kaksi pa­ra­met­ria firstName ja lastName. Kun luodaan tämän luokan instanssi, nämä pa­ra­met­rit vä­li­te­tään, ja kon­struk­to­ri alustaa ins­tans­sin firstName ja lastName omi­nai­suu­det vas­taa­vil­la arvoilla. this viittaa luokan nykyiseen ins­tans­siin, jossa koodi suo­ri­te­taan.

Me­ne­tel­mät

Ty­peSc­rip­tis­sä metodit ovat funk­tioi­ta, jotka voidaan mää­ri­tel­lä luokissa ja soveltaa niiden ins­tans­sei­hin. Me­to­doi­den avulla voit suorittaa tiettyjä toi­min­to­ja tai ope­raa­tioi­ta luokan kon­teks­tis­sa.

class ClassName {
    // ...
    methodName(parameter1: Type1, parameter2: Type2, ...): ReturnType {
    }
    // ...
}
ty­pesc­ript
  • met­hod­Na­me: me­ne­tel­män nimi
  • parameter: Tyyppi: me­ne­tel­män hy­väk­sy­mät va­lin­nai­set pa­ra­met­rit
  • Re­turn­Ty­pe: tämä on tie­to­tyyp­pi, joka määrittää me­ne­tel­män pa­laut­ta­man arvon. Jos menetelmä ei palauta mitään, voit määrittää arvon void.

Voit käyttää luok­kains­tans­sin omi­nai­suut­ta tai kutsua sen me­ne­tel­mää pis­teo­pe­raat­to­ril­la ., jota seuraa me­ne­tel­män nimi ja tar­vit­ta­vat ar­gu­men­tit, jos menetelmä odottaa pa­ra­met­re­ja.

class Person {
    firstName: string;
    lastName: string;
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    getFullName(): string {
        return this.firstName + " " + this.lastName;
    }
}
const person = new Person("John", "Doe");
const fullName = person.getFullName();
ty­pesc­ript

Me­ne­tel­mää getFullName käytetään luomaan ja pa­laut­ta­maan henkilön koko nimi. Se käyttää luokassa mää­ri­tel­ty­jen ja kon­struk­to­ris­sa alus­tet­tu­jen omi­nai­suuk­sien firstName ja lastName arvoja. Objekti person luodaan avain­sa­nal­la new, jota seuraa luokan nimi ja vastaavat pa­ra­met­rit. Menetelmä yhdistää kaksi merk­ki­jo­noa, kun se kutsutaan, ja palauttaa koko nimen merk­ki­jo­no­na. Objektin person tulos on siis ”John Doe”.

Ty­peSc­ript-luokan esi­merk­ke­jä

Ty­peSc­ript-luokissa on erilaisia me­ka­nis­me­ja objektien rakenteen ja käyt­täy­ty­mi­sen jär­jes­tä­mi­seen ja hal­lin­taan. Alla esit­te­lem­me joitakin Ty­peSc­ript-luokkien käytön kä­sit­tei­tä.

Pääsy

Ty­peSc­ript tarjoaa kolme pääsyn muok­kaa­jaa: public, private ja protected, joilla hallitaan pääsyä luokkien sisäisiin ja ulkoisiin omi­nai­suuk­siin ja me­ne­tel­miin.

  • public (vakio): public va­rus­te­tut omi­nai­suu­det ja me­ne­tel­mät voidaan kutsua mistä tahansa, sekä luokan sisä- että ul­ko­puo­lel­ta.
  • yk­si­tyi­nen: private viittaa omi­nai­suuk­siin ja me­ne­tel­miin, joita voidaan kutsua vain luokan sisällä. Ne eivät ole käy­tet­tä­vis­sä ul­koi­sis­sa koo­dio­sis­sa.
  • suojattu: protected lla merkityt omi­nai­suu­det ja me­ne­tel­mät voidaan kutsua luokasta itsestään ja joh­de­tuis­ta luokista (perintö), mutta ei ul­koi­ses­ta koodista.
class Person {
    private socialSecurityNumber: string;
    constructor(ssn: string) {
        this.socialSecurityNumber = ssn;
    }
    greet() {
        console.log("Hello, I am a person with SSN: " + this.socialSecurityNumber);
    }
}
const person = new Person("123-45-6789");
person.greet();
ty­pesc­ript

Tässä esi­mer­kis­sä socialSecurityNumber on yk­si­tyi­nen omi­nai­suus, johon pääsee käsiksi vain Person sisällä. Voit kuitenkin kutsua greet luokan ul­ko­puo­lel­ta.

Perintö

Perintö on ob­jek­ti­suun­tau­tu­neen oh­jel­moin­nin (OOP) pe­rus­kon­sep­ti, jota käytetään Ty­peSc­rip­tis­sä ja monissa muissa internet-oh­jel­moin­ti­kie­lis­sä. Sen avulla voidaan luoda uusi luokka olemassa olevan pe­rus­luo­kan tai su­per­luo­kan pohjalta. Johdettu luokka (alaluokka) perii pe­rus­luo­kan omi­nai­suu­det ja me­ne­tel­mät ja voi laajentaa tai mukauttaa niitä.

class Animal {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    makeSound() {
        console.log("Some generic sound");
    }
}
class Dog extends Animal {
    makeSound() {
        console.log(this.name + " barks");
    }
}
const myDog = new Dog("Buddy");
myDog.makeSound();
ty­pesc­ript

Avain­sa­nan extends avulla alaluokka Dog perii omi­nai­suu­det ja me­ne­tel­mät ylä­luo­kas­ta Animal. Luokka Dog ohittaa me­ne­tel­män makeSound li­sä­täk­seen tietyn käyt­täy­ty­mi­sen ja perii samalla omi­nai­suu­den name luokasta Animal.

Vain luku

Voit käyttää readonly mää­rit­te­le­mään Ty­peSc­ript-luokkien tai -objektien omi­nai­suu­det vain luku -omi­nai­suuk­sik­si. Tämä tar­koit­taa, että kun vain luku -omi­nai­suus on alustettu, sen arvoa ei voi enää muuttaa.

class Circle {
    readonly pi: number = 3.14159;
    radius: number;
    constructor(radius: number) {
        this.radius = radius;
    }
    getArea() {
        return this.pi    *this.radius*    this.radius;
    }
}
const myCircle = new Circle(5);
console.log(myCircle.getArea()); // Output: ≈ 78,54
ty­pesc­ript

pi on esi­mer­kis­säm­me vain luku -tyyppinen ja se alus­te­taan kon­struk­to­ris­sa. Alus­tuk­sen jälkeen pi ei voi enää muuttaa. Jos yrität muuttaa pi arvoa alus­tuk­sen jälkeen, Ty­peSc­ript tuottaa kom­pi­laa­tio­vir­heen.

da29341d85afde2140ae2c99281225e0

Siirry pää­va­lik­koon