# Kā definēt un izmantot TypeScript klases

TypeScript klases nodrošina skaidru un strukturētu veidu, kā organizēt datus un darbības **objektā**. Tas atvieglo jums modelēt vienības un jēdzienus savā kodā.

## Kas ir TypeScript klases?

Klases ir galvenais jēdziens TypeScript, kas ir uz JavaScript balstīta programmēšanas valoda. Klases ir **strukturēta metode objektu definēšanai** un objektorientētas programmēšanas (OOP) piemērošanai. TypeScript klases ir kā plāni objektu radīšanai, kas apvieno loģiski saistītus datus un metodes.

[TypeScript](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/kas-ir-typescript/) satur visas JavaScript funkcijas, kā arī **statisko tipizāciju**. Tas ļauj norādīt datu tipus [TypeScript funkcijām](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/typescript-funkcijas/), mainīgajiem un klasēm, lai varētu atklāt kompilācijas kļūdas. Papildus tipu drošībai TypeScript klases atbalsta arī tādus jēdzienus kā pārmantošana un abstrakcija, kas atvieglo sarežģītu lietojumprogrammu izstrādi.

Ar TypeScript klasēm var izveidot skaidru **klašu hierarhiju**, kas pārmanto īpašības un metodes. Tas veicina koda atkārtotu izmantošanu un strukturēšanu. Klases konstruktori ļauj inicializēt instancēm un nodrošina konsekventu objektu izveidi.

## Kāda ir TypeScript klašu sintakse?

TypeScript klašu notācija ir līdzīga **ECMAScript 6 (ES6)** notācijai un ir JavaScript klašu sintakses paplašināta versija. TypeScript klase var saturēt dažādus elementus, lai definētu objektu struktūru un uzvedību. Galvenās sastāvdaļas ir:

- **Īpašības**
- **Konstruktori**
- **Metodes**

### Īpašības

Īpašības nosaka **objekta stāvokli**. Tās uzglabā datu vērtības un var tikt anotētas ar datu tipiem, lai tām būtu tikai derīgas vērtības.

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

- **ClassName**: klases nosaukums
- **propertyName**: īpašības nosaukums, kuru vēlaties definēt
- **propertyType**: īpašības datu tips

Šeit ir konkrēts piemērs:

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

Vispirms tiek definēta `Person` klase ar īpašību `name` tipa `string`. Tas nozīmē, ka `Person` klases instancēm ir `name` īpašība, kas glabā **virknes**.

### Konstruktors

Konstruktors TypeScript ir īpaša metode, kas tiek izsaukta, kad tiek izveidots klases instances (objekts). Tas ir nepieciešams, lai **inicializētu objekta īpašības**. Konstruktors būtībā definē instances sākotnējo stāvokli. Konstruktorā var norādīt parametrus, lai nodotu vērtības, instancējot TypeScript klases.

TypeScript konstruktora pamata sintakse ir:

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

- **konstruktors**: katrai klasei var būt viens konstruktors. Ja konstruktors nav definēts, pēc noklusējuma tiek izveidots tukšs konstruktors.
- **parametrs: Tips**: parametri ir fakultatīvi, atkarībā no klases un tās prasībām. Parametriem jābūt marķētiem ar to datu tipiem.

Konstruktora piemērs:

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

Iepriekš minētajā piemērā klasei `Person` ir konstruktors, kas pieņem divus parametrus `firstName` un `lastName`. **Izveidojot** šīs klases **instanci**, šie parametri tiek nodoti, un konstruktors inicializē instances īpašības `firstName` un `lastName` ar atbilstošajām vērtībām. `this` attiecas uz klases pašreizējo instanci, kurā tiek izpildīts kods.

### Metodes

TypeScript valodā metodes ir funkcijas, kuras var definēt klasēs un piemērot to instancēm. Metodes ļauj veikt **noteiktas darbības vai operācijas** klases kontekstā.

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

- **methodName**: metodes nosaukums
- **parametrs: Tips**: fakultatīvi parametri, kurus metode pieņem
- **ReturnType**: tas ir datu tips, kas nosaka vērtību, ko metode atgriež. Ja metode neko neatgriež, varat norādīt `void`.

Lai piekļūtu īpašībai vai izsauc metodi klases instancē, izmantojiet punktu operatoru `.`, kam seko metodes nosaukums un nepieciešamie argumenti, ja metodei ir nepieciešami parametri.

```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` metode tiek izmantota, lai izveidotu un atgrieztu personas pilnu vārdu. Tā piekļūst `firstName` un `lastName` īpašību vērtībām, kas definētas klasē un inicializētas konstruktorā. Objekts `person` tiek izveidots ar atslēgvārdu `new`, kam seko klases nosaukums un attiecīgie parametri. Metode **savieno abas virknes**, kad tā tiek izsaukta, un atgriež pilnu vārdu kā virkni. Tādējādi objekta `person` izvade ir “John Doe”.

## TypeScript klases piemēri

TypeScript klasēm ir dažādi mehānismi, lai organizētu un kontrolētu **objektu struktūru un darbību**. Turpinājumā mēs iepazīstināsim ar dažiem TypeScript klašu izmantošanas jēdzieniem.

### Piekļuve

TypeScript piedāvā trīs piekļuves modifikatorus: `public`, `private` un `protected`, lai kontrolētu piekļuvi īpašībām un metodēm klasē un ārpus tās.

- **public (standarts)**: īpašības un metodes, kas atzīmētas ar `public`, var izsaukt no jebkuras vietas, gan klasē, gan ārpus tās.
- **privāts**: `private` attiecas uz īpašībām un metodēm, kuras var izsaukt tikai pašā klasē. Tās nav pieejamas ārējām koda daļām.
- **aizsargāts**: īpašības un metodes, kas atzīmētas ar `protected`, var izsaukt pati klase un atvasinātās klases (pārmantošanā), bet ne ārējais kods.

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

Šajā piemērā `socialSecurityNumber` ir privāta īpašība, kurai var piekļūt tikai `Person` klasē. Tomēr metodi `greet` var izsaukt no ārpuses klases.

### Mantojums

Pārmantošana ir fundamentāls jēdziens objektorientētā programmēšanā (OOP), kas tiek izmantots TypeScript un daudzās citās interneta programmēšanas valodās. Tas ļauj izveidot jaunu klasi, pamatojoties uz esošo **bāzes klasi vai superklasi**. Atvasinātā klase (apakšklase) pārmanto bāzes klases īpašības un metodes un var tās paplašināt vai pielāgot.

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

Izmantojot atslēgvārdu `extends`, apakšklase `Dog` pārmanto īpašības un metodes no virsklases `Animal`. Klase `Dog` pārraksta metodi `makeSound`, lai pievienotu konkrētu darbību, vienlaikus pārmantojot īpašību `name` no `Animal`.

### Tikai lasīšanai

Jūs varat izmantot `readonly`, lai deklarētu TypeScript klases vai objektu īpašības kā **tikai lasāmas**. Tas nozīmē, ka, tiklīdz tikai lasāmā īpašība ir inicializēta, tās vērtību vairs nevar mainīt.

```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ūsu piemērā īpašums `pi` ir tikai lasāms un tiek inicializēts konstruktorā. Pēc inicializācijas `pi` vairs nevar mainīt. Ja pēc inicializācijas mēģināsiet mainīt `pi` vērtību, TypeScript radīs kompilācijas kļūdu.


This is a markdown version of: [https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/typescript-klases/](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/typescript-klases/) for AI/LLM consumption.