Razredi Type­Script za­go­ta­vlja­jo jasen in struk­tu­ri­ran način za or­ga­ni­za­ci­jo podatkov in vedenja v objektu. To vam olajša mo­de­li­ra­nje entitet in konceptov v vaši kodi.

Kaj so razredi Type­Script?

Razredi so ključni pojem v Type­Scrip­tu, ki je pro­gram­ski jezik, temelječ na Ja­va­Scrip­tu. Razredi pred­sta­vlja­jo struk­tu­ri­ra­no metodo za de­fi­ni­ra­nje objektov in za uporabo objektno usmer­je­ne­ga pro­gra­mi­ra­nja (OOP). Razredi v Type­Scrip­tu so kot načrti za ustvar­ja­nje objektov, ki zdru­žu­je­jo logično povezane podatke in metode.

Type­Script vsebuje vse funkcije Ja­va­Script in vključuje tudi statično ti­pi­zi­ra­nje. To vam omogoča, da določite po­dat­kov­ne tipe za funkcije, spre­men­ljiv­ke in razrede Type­Script, tako da lahko odkrijete napake v času kom­pi­li­ra­nja. Poleg varnosti tipov razredi Type­Script podpirajo tudi koncepte, kot sta dedovanje in ab­strak­ci­ja, kar olajšuje razvoj kom­ple­ksnih aplikacij.

S pomočjo razredov Type­Script lahko ustvarite jasno hi­e­rar­hi­jo razredov, ki dedujejo lastnosti in metode. To spodbuja ponovno uporabo in struk­tu­ri­ra­nje kode. Kon­struk­tor­ji razredov omogočajo ini­ci­a­li­za­ci­jo instanc in za­go­ta­vlja­jo dosledno ustvar­ja­nje objektov.

Kakšna je sintaksa za razrede Type­Script?

Notacija razredov Type­Script je podobna notaciji ECMA­Script 6 (ES6) in je raz­šir­je­na različica sintakse razredov Ja­va­Script. Razred Type­Script lahko vsebuje različne elemente za opre­de­li­tev strukture in obnašanja objektov. Glavne kom­po­nen­te so:

  • Lastnosti
  • Kon­struk­tor­ji
  • Metode

Lastnosti

Lastnosti določajo stanje objekta. Shra­nju­je­jo vrednosti podatkov in jih je mogoče opremiti z opombami o po­dat­kov­nih tipih, tako da imajo samo veljavne vrednosti.

class ClassName {
    propertyName: propertyType;
}
type­script
  • ClassName: ime razreda
  • pro­per­tyNa­me: ime lastnosti, ki jo želite de­fi­ni­ra­ti
  • pro­per­tyType: po­dat­kov­ni tip lastnosti

Tukaj je konkreten primer:

class Person {
    name: string;
}
type­script

Najprej je opre­de­lje­na razred Person z la­stno­stjo name tipa string. To pomeni, da imajo primeri razreda Person lastnost name, ki shranjuje nize.

Kon­struk­tor

Kon­struk­tor v Type­Scrip­tu je posebna metoda, ki se pokliče ob ustvar­ja­nju instance razreda (objekta). Potreben je za ini­ci­a­li­za­ci­jo lastnosti objekta. Kon­struk­tor v bistvu definira začetno stanje instance. V kon­struk­tor­ju lahko določite parametre za prenos vrednosti ob in­stan­ci­ra­nju razredov Type­Script.

Osnovna sintaksa kon­struk­tor­ja v Type­Scrip­tu je:

class ClassName {
    constructor(parameter1: Type1, parameter2: Type2, ...) {
    }
}
type­script
  • kon­struk­tor: vsaka razred lahko ima en kon­struk­tor. Če kon­struk­tor ni definiran, se privzeto ustvari prazen kon­struk­tor.
  • parameter: Tip: parametri so neobvezni, odvisno od razreda in njegovih zahtev. Parametri morajo biti označeni s svojimi po­dat­kov­ni­mi tipi.

Primer kon­struk­tor­ja:

class Person {
    firstName: string;
    lastName: string;
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
type­script

V zgornjem primeru ima razred Person kon­struk­tor, ki sprejema dva parametra firstName in lastName. Pri ustvar­ja­nju instance tega razreda se ti parametri prenesejo, kon­struk­tor pa ini­ci­a­li­zi­ra lastnosti firstName in lastName instance z ustre­zni­mi vre­dnost­mi. this se nanaša na trenutno instanco razreda, na kateri se izvaja koda.

Metode

V Type­Scrip­tu so metode funkcije, ki jih je mogoče de­fi­ni­ra­ti v razredih in uporabiti v njihovih primerkih. Metode omogočajo izvajanje določenih dejanj ali operacij v kontekstu razreda.

class ClassName {
    // ...
    methodName(parameter1: Type1, parameter2: Type2, ...): ReturnType {
    }
    // ...
}
type­script
  • me­tho­dNa­me: ime metode
  • parameter: Tip: neobvezni parametri, ki jih metoda sprejema
  • vr­sta­Vr­sta: to je vrsta podatkov, ki določa vrednost, ki jo metoda vrne. Če metoda ne vrne ničesar, lahko navedete void.

Za dostop do lastnosti ali klic metode na primerku razreda uporabite operator piko ., ki mu sledi ime metode in zahtevani argumenti, če metoda pričakuje parametre.

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();
type­script

Metoda getFullName se uporablja za ustvar­ja­nje in vrnitev polnega imena osebe. Dostopa do vrednosti lastnosti firstName in lastName, ki so de­fi­ni­ra­ne v razredu in ini­ci­a­li­zi­ra­ne v kon­struk­tor­ju. Objekt person se ustvari s ključno besedo new, ki ji sledi ime razreda in ustrezni parametri. Metoda pri klicu združi dva niza in vrne polno ime kot niz. Izhod za objekt person je torej „John Doe“.

Primeri razredov Type­Script

Razredi Type­Script imajo različne mehanizme za or­ga­ni­za­ci­jo in nadzor strukture in obnašanja objektov. V na­da­lje­va­nju pred­sta­vlja­mo nekaj konceptov za uporabo razredov Type­Script.

Dostop

Type­Script ponuja tri mo­di­fi­ka­tor­je dostopa: public, private in protected za nadzor dostopa do lastnosti in metod znotraj in zunaj razreda.

  • javno (stan­dar­dno): lastnosti in metode, označene s public, se lahko pokličejo od kjerkoli, tako znotraj kot zunaj razreda.
  • zasebno: private se nanaša na lastnosti in metode, ki jih je mogoče poklicati le znotraj razreda. Zunanji deli kode do njih nimajo dostopa.
  • zaščiteno: lastnosti in metode, označene s protected, lahko pokliče razred sam in izvedeni razredi (v dedovanju), vendar ne zunanji koda.
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();
type­script

V tem primeru je socialSecurityNumber zasebna lastnina, do katere je mogoče dostopati samo znotraj razreda Person. Vendar pa lahko metodo greet pokličete zunaj razreda.

Dedovanje

Dedovanje je temeljni pojem v objektno usmer­je­nem pro­gra­mi­ra­nju (OOP), ki se uporablja v Type­Scrip­tu in mnogih drugih in­ter­ne­tnih pro­gram­skih jezikih. Omogoča ustvar­ja­nje nove razreda na podlagi ob­sto­je­če­ga osnovnega razreda ali nad­ra­zre­da. Izpeljani razred (podrazred) podeduje lastnosti in metode osnovnega razreda in jih lahko razširi ali prilagodi.

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();
type­script

Z uporabo ključne besede extends podrazred Dog podeduje lastnosti in metode iz nad­ra­zre­da Animal. Razred Dog nadomesti metodo makeSound, da doda določeno vedenje, hkrati pa podeduje lastnost name iz Animal.

Samo za branje

Z readonly lahko de­kla­ri­ra­te lastnosti razredov ali objektov Type­Script kot samo za branje. To pomeni, da ko je lastnost samo za branje ini­ci­a­li­zi­ra­na, njene vrednosti ni več mogoče spre­me­ni­ti.

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
type­script

V našem primeru je lastnost pi samo za branje in se ini­ci­a­li­zi­ra v kon­struk­tor­ju. Po ini­ci­a­li­za­ci­ji se pi ne more več spre­mi­nja­ti. Če poskušate spre­me­ni­ti vrednost pi po ini­ci­a­li­za­ci­ji, bo Type­Script ustvaril napako pri pre­va­ja­nju.

117a1597efe473942f630cae75678a0b

6fe9ad4655c8a5b1928748d3fe74ed9a

d8f0a02ba8214fdd5d685d3903e5f4f9

bff069b69f77dc61e074e3909fcf800c

7a031ebda636ff7fd6d7bc2196481fc2

Go to Main Menu