TypeScript classlar
TypeScript JavaScript sinflariga turlar va ko‘rinish o‘zgartirish moslamalarini qo‘shadi.
JavaScript sinflari haqida ko‘proq bilib oling shu yerda.
A’zolar: turlari
Class a’zolari (xususiyatlar va usullar) o‘zgaruvchilarga o‘xshash turdagi izohlar yordamida yoziladi.
Misol
class Person {
name: string;
}
const person = new Person();
person.name = "Jane";
O‘zingiz sinab ko‘ring »
A’zolar: Ko‘rinish
Class a’zolariga ko‘rinishga ta’sir qiluvchi maxsus modifikatorlar ham berilishi mumkin.
TypeScript-da uchta asosiy ko‘rinish modifikatorlari mavjud.
public- (standart) klass a’zosiga istalgan joydan murojaat qilishga ruxsat beradiprivate- class a’zosiga faqat class ichidan kirishga ruxsat beradiprotected- class a’zosiga o‘zidan va uni meros qilib olgan har qanday sinflardan kirishga ruxsat beradi, bu quyidagi meros bo‘limida ko‘rib chiqilgan
Misol
class Person {
private name: string;
public constructor(name: string) {
this.name = name;
}
public getName(): string {
return this.name;
}
}
const person = new Person("Jane");
console.log(person.getName()); // no error
console.log(person.name); // Error: Property 'name' is private and only accessible within class 'Person'.
O‘zingiz sinab ko‘ring »
Parametr xususiyatlari
TypeScript parametrga ko‘rinish o‘zgartiruvchisini qo‘shish orqali konstruktorda class a’zolarini aniqlashning qulay usulini taqdim etadi.
Misol
class Person {
// name is a private member variable
public constructor(private name: string) {}
public getName(): string {
return this.name;
}
}
const person = new Person("Jane");
console.log(person.getName());
O‘zingiz sinab ko‘ring »
Faqat o‘qish
Massivlarga o‘xshab, readonly kalit so‘zi class a’zolarini o‘zgartirishni oldini oladi.
Misol
class Person {
private readonly name: string;
public constructor(name: string) {
// name cannot be changed after this initial definition, which has to be either at its declaration or in the constructor.
this.name = name;
}
public getName(): string {
return this.name;
}
}
const person = new Person("Jane");
console.log(person.getName());
O‘zingiz sinab ko‘ring »
Meros: amalga oshiradi
Interfeyslar (bu yerda ko‘rib chiqilgan) implements kalit so‘zi orqali klass amal qilishi kerak bo‘lgan tipni aniqlash uchun ishlatilishi mumkin.
Misol
interface Shape {
getArea: () => number;
}
class Rectangle implements Shape {
public constructor(protected readonly width: number, protected readonly height: number) {}
public getArea(): number {
return this.width * this.height;
}
}
O‘zingiz sinab ko‘ring »
implements dan keyin vergul bilan ajratib ko‘rsatish orqali bir nechta interfeyslarni amalga oshirishi mumkin: class Rectangle implements Shape, Colored {Meros: uzaytiriladi
Sinflar bir-birini extends kalit so‘zi orqali kengaytirishi mumkin.
Class faqat bitta sinfni kengaytirishi mumkin.
Misol
interface Shape {
getArea: () => number;
}
class Rectangle implements Shape {
public constructor(protected readonly width: number, protected readonly height: number) {}
public getArea(): number {
return this.width * this.height;
}
}
class Square extends Rectangle {
public constructor(width: number) {
super(width, width);
}
// getArea gets inherited from Rectangle
}
O‘zingiz sinab ko‘ring »
Bekor qilish
Agar class boshqa sinfni kengaytirsa, u ota-class a’zolarini bir xil nom bilan almashtirishi mumkin.
TypeScript-ning yangi versiyalari buni override kalit so‘zi bilan aniq belgilash imkonini beradi.
Misol
interface Shape {
getArea: () => number;
}
class Rectangle implements Shape {
// using protected for these members allows access from classes that extend from this class, such as Square
public constructor(protected readonly width: number, protected readonly height: number) {}
public getArea(): number {
return this.width * this.height;
}
public toString(): string {
return `Rectangle[width=${this.width}, height=${this.height}]`;
}
}
class Square extends Rectangle {
public constructor(width: number) {
super(width, width);
}
// this toString replaces the toString from Rectangle
public override toString(): string {
return `Square[width=${this.width}]`;
}
}
O‘zingiz sinab ko‘ring »
Sukut bo‘yicha override kalit so‘zi usulni bekor qilishda ixtiyoriy bo‘lib, faqat mavjud bo‘lmagan usulni tasodifan bekor qilishning oldini olishga yordam beradi.
Uni bekor qilishda foydalanishga majbur qilish uchun noImplicitOverride sozlamasidan foydalaning.
Abstrakt classlar
Sinflar barcha a’zolarni amalga oshirmasdan boshqa classlar uchun asosiy class sifatida foydalanish imkonini beradigan tarzda yozilishi mumkin.
Bu abstract kalit so‘zi yordamida amalga oshiriladi.
Amalga oshirilmagan a’zolar ham abstract kalit so‘zidan foydalanadilar.
Misol
abstract class Polygon {
public abstract getArea(): number;
public toString(): string {
return `Polygon[area=${this.getArea()}]`;
}
}
class Rectangle extends Polygon {
public constructor(protected readonly width: number, protected readonly height: number) {
super();
}
public getArea(): number {
return this.width * this.height;
}
}
O‘zingiz sinab ko‘ring »
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
