# Kaip apibrėžti ir naudoti TypeScript klases

TypeScript klasės suteikia aiškų ir struktūrizuotą būdą organizuoti duomenis ir elgesį **objekte**. Tai palengvina objektų ir sąvokų modeliavimą jūsų kode.

## Kas yra TypeScript klasės?

Klasės yra pagrindinė TypeScript, programavimo kalbos, pagrįstos JavaScript, sąvoka. Klasės yra **struktūrizuotas metodas objektams apibrėžti** ir objektiniam programavimui (OOP) taikyti. TypeScript klasės yra tarsi planai objektams kurti, kurie apjungia logiškai susijusius duomenis ir metodus.

[TypeScript](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/kas-yra-typescript/) turi visas JavaScript funkcijas ir taip pat apima **statinį tipizavimą**. Tai leidžia nurodyti [TypeScript funkcijų](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/typescript-funkcijos/), kintamųjų ir klasių duomenų tipus, kad būtų galima aptikti kompiliavimo klaidas. Be tipo saugumo, TypeScript klasės taip pat palaiko tokias sąvokas kaip paveldėjimas ir abstrakcija, kurios palengvina sudėtingų programų kūrimą.

Naudodami „TypeScript“ klases, galite sukurti aiškią **klasių hierarchiją,** kuri paveldėja savybes ir metodus. Tai skatina kodo pakartotinį naudojimą ir struktūrizavimą. Klasės konstruktoriai leidžia inicijuoti instancus ir užtikrina nuoseklų objektų kūrimą.

## Kokia yra TypeScript klasių sintaksė?

TypeScript klasių žymėjimas yra panašus į **ECMAScript 6 (ES6)** žymėjimą ir yra išplėsta JavaScript klasių sintaksės versija. TypeScript klasė gali turėti įvairių elementų, kurie apibrėžia objektų struktūrą ir elgseną. Pagrindiniai komponentai yra:

- **Savybės**
- **Konstruktoriai**
- **Metodai**

### Savybės

Savybės nulemia **objekto būseną**. Jos saugo duomenų vertes ir gali būti pažymėtos duomenų tipais, kad turėtų tik galiojančias vertes.

```typescript
class ClassName {
    propertyName: propertyType;
}
```

- **ClassName**: klasės pavadinimas
- **propertyName**: savybės, kurią norite apibrėžti, pavadinimas
- **propertyType**: savybės duomenų tipas

Štai konkretus pavyzdys:

```typescript
class Person {
    name: string;
}
```

Pirmiausia apibrėžiama `Person` klasė su `name` tipo `string` savybe. Tai reiškia, kad `Person` klasės egzemplioriai turi `name` savybę, kurioje saugomi **styginiai**.

### Konstruktorius

TypeScript konstruktorius yra specialus metodas, kuris iškviečiamas, kai sukuriama klasės instancė (objektas). Jis reikalingas **objekto savybių inicijavimui**. Konstruktorius iš esmės apibrėžia instancės pradinę būseną. Konstruktoriuje galima nurodyti parametrus, kad instancuojant TypeScript klases būtų perduodamos reikiamos reikšmės.

Pagrindinė konstruktoriaus sintaksė TypeScript kalboje yra tokia:

```typescript
class ClassName {
    constructor(parameter1: Type1, parameter2: Type2, ...) {
    }
}
```

- **konstruktorius**: kiekviena klasė gali turėti vieną konstruktorių. Jei konstruktorius nėra apibrėžtas, pagal numatytuosius nustatymus sukuriama tuščia konstruktoriaus versija.
- **parametras: Tipas**: parametrai yra neprivalomi, priklausomai nuo klasės ir jos reikalavimų. Parametrai turėtų būti pažymėti jų duomenų tipais.

Konstruktoriaus pavyzdys:

```typescript
class Person {
    firstName: string;
    lastName: string;
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
```

Pateiktame pavyzdyje klasė `Person` turi konstruktorių, kuris priima du parametrus `firstName` ir `lastName`. **Sukuriant** šios klasės **instancą**, šie parametrai perduodami, o konstruktorius inicijuoja instancos savybes `firstName` ir `lastName` atitinkamomis reikšmėmis. `this` nurodo dabartinę klasės instancą, kurioje vykdomas kodas.

### Metodai

TypeScript kalboje metodai yra funkcijos, kurios gali būti apibrėžtos klasėse ir taikomos jų instancėms. Metodai leidžia atlikti **tam tikrus veiksmus ar operacijas** klasės kontekste.

```typescript
class ClassName {
    // ...
    methodName(parameter1: Type1, parameter2: Type2, ...): ReturnType {
    }
    // ...
}
```

- **methodName**: metodo pavadinimas
- **parameter: tipas**: neprivalomi parametrai, kuriuos priima metodas
- **ReturnType**: tai duomenų tipas, kuris nustato vertę, kurią grąžina metodas. Jei metodas nieko negrąžina, galite nurodyti `void`.

Norėdami pasiekti savybę arba iškviesti klasės egzemplioriaus metodą, naudokite taško operatorius `.`, po kurio nurodykite metodo pavadinimą ir reikiamus argumentus, jei metodas reikalauja parametrų.

```typescript
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();
```

`getFullName` metodas naudojamas sukurti ir grąžinti asmens pilną vardą. Jis pasiekia `firstName` ir `lastName` savybių, apibrėžtų klasėje ir inicijuotų konstruktoriuje, vertes. Objektas `person` sukurtas naudojant raktinį žodį `new`, po kurio eina klasės pavadinimas ir atitinkami parametrai. Metodas **sujungia du styginius**, kai yra iškviečiamas, ir grąžina visą vardą kaip styginį. Todėl objekto `person` išvestis yra „John Doe“.

## TypeScript klasės pavyzdžiai

TypeScript klasės turi įvairius mechanizmus, skirtus **objektų struktūrai ir elgsenai** organizuoti ir valdyti. Toliau pateikiame keletą koncepcijų, kaip naudoti TypeScript klases.

### Prieiga

TypeScript siūlo tris prieigos modifikatorius: `public`, `private` ir `protected`, skirtus kontroliuoti prieigą prie savybių ir metodų klasės viduje ir už jos ribų.

- **viešos (standartinės)**: savybės ir metodai, pažymėti `public`, gali būti iškviečiami iš bet kur, tiek klasės viduje, tiek už jos ribų.
- **privatūs**: `private` reiškia savybes ir metodus, kuriuos galima iškviesti tik pačioje klasėje. Jie yra neprieinami išorinėms kodo dalims.
- **apsaugotos**: savybės ir metodai, pažymėti `protected`, gali būti iškviečiami pačioje klasėje ir išvestinėse klasėse (paveldėjime), bet ne išoriniame kode.

```typescript
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();
```

Šiame pavyzdyje `socialSecurityNumber` yra privati nuosavybė, prieinama tik `Person` klasėje. Tačiau `greet` metodą galima iškviesti iš klasės ribų.

### Paveldėjimas

Paveldėjimas yra pagrindinė objektinio programavimo (OOP) sąvoka, naudojama TypeScript ir daugelyje kitų interneto programavimo kalbų. Ji leidžia sukurti naują klasę remiantis esama **bazine klase arba viršklase**. Išvestinė klasė (paveldėtoji klasė) paveldi bazinės klasės savybes ir metodus ir gali juos išplėsti arba pritaikyti.

```typescript
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();
```

Naudodama raktinį žodį `extends`, vaiko klasė `Dog` paveldi savybes ir metodus iš tėvų klasės `Animal`. Klasė `Dog` perrašo `makeSound` metodą, kad pridėtų konkretų elgesį, tuo pačiu paveldėdama `name` savybę iš `Animal`.

### Tik skaityti

Galite naudoti `readonly`, kad TypeScript klasių ar objektų savybes deklaruotumėte kaip **tik skaitymo**. Tai reiškia, kad, kai tik skaitymo savybė yra inicijuota, jos vertės nebegalima keisti.

```typescript
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
```

Mūsų pavyzdyje `pi` savybė yra tik skaitymo, ir ji yra inicijuojama konstruktoriuje. Po inicijavimo `pi` nebegali būti keičiama. Jei bandysite pakeisti `pi` vertę po inicijavimo, TypeScript sukurs kompiliacijos klaidą.


This is a markdown version of: [https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/typescript-klases/](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/typescript-klases/) for AI/LLM consumption.