readonly xususiyatlar va parameter properties
Foydalanuvchi classida id bir marta berilgandan keyin o'zgarmasligi kerak. readonly — xususiyat faqat constructorda beriladi, keyin o'zgartirib bo'lmaydi.
readonly xususiyat
class Foydalanuvchi {
readonly id: number;
ism: string;
constructor(id: number, ism: string) {
this.id = id; // ✅ — constructorda berish mumkin
this.ism = ism;
}
ismniOzgartir(yangiIsm: string): void {
this.ism = yangiIsm; // ✅ — ism readonly emas
this.id = 99; // ❌ — Cannot assign to 'id' because it is a read-only property
}
}
const u = new Foydalanuvchi(1, "Jasur");
u.ism = "Vali"; // ✅
u.id = 2; // ❌ — readonly
Parameter properties — qisqa yozuv
Constructor parametriga modifier qo'shilsa — xususiyat e'lon va tayinlash avtomatik:
// Uzun yozuv
class Mahsulot {
id: number;
nomi: string;
narxi: number;
constructor(id: number, nomi: string, narxi: number) {
this.id = id;
this.nomi = nomi;
this.narxi = narxi;
}
}
// Qisqa yozuv — parameter properties
class Mahsulot {
constructor(
public id: number,
public nomi: string,
public narxi: number,
) {}
// e'lon + tayinlash avtomatik
}
Ikkalasi bir xil natija beradi.
readonly parameter property
class Config {
constructor(
public readonly host: string,
public readonly port: number,
private readonly ssl: boolean,
) {}
ulanish(): string {
return `${this.ssl ? "https" : "http"}://${this.host}:${this.port}`;
}
}
const cfg = new Config("localhost", 5432, true);
cfg.host = "boshqa"; // ❌ — readonly
cfg.ssl; // ❌ — private
cfg.ulanish(); // ✅
Aralash yozuv — ba'zi parameter property, ba'zi oddiy
class Foydalanuvchi {
readonly yaratilgan: Date = new Date(); // initializator — parameter property emas
constructor(
public readonly id: number,
public ism: string,
private parol: string, // tashqaridan yashirin
) {}
parolTekshir(p: string): boolean {
return this.parol === p;
}
}
Tez-tez uchraydigan xatolar
readonly ni constructordan keyin o'zgartirishga urinish:
class A {
readonly x: number;
constructor(x: number) { this.x = x; }
yangilash(n: number) {
this.x = n; // ❌ — constructor tashqarida
}
}
Parameter property va qo'lda e'lonni birga:
class A {
ism: string; // ❌ — duplikat, parameter property bilan
constructor(public ism: string) {} // qo'lda e'lon shart emas
}
Xulosa
class Example {
readonly tarixiy: Date = new Date(); // initializator
constructor(
public readonly id: number, // readonly param property
public ism: string, // oddiy param property
private sir: string, // private param property
protected readonly kod: number, // protected readonly
) {}
}
Parameter property — xususiyat e'lon + constructor tayinlashni qisqartiradi. readonly — faqat constructorda qiymat olinadi.
Keyingi dars
41-dars: Getter va Setter — TypeScript da