Type annotation — qachon va qayerda yoziladi
TypeScript ning asosiy vositasi — type annotation (tur belgisi). : tur ko'rinishida yoziladi. Lekin muhim narsa: har joyga yozish shart emas — TypeScript ko'p hollarda o'zi tushunadi.
Annotation qanday yoziladi
O'zgaruvchi, parametr, qaytish qiymati — uchala joyda yozilishi mumkin:
// O'zgaruvchi
const ism: string = "Jasur";
const yosh: number = 25;
const faol: boolean = true;
// Funksiya parametri va qaytish qiymati
function qoshish(a: number, b: number): number {
return a + b;
}
Type inference — TypeScript o'zi tushunadi
TypeScript aqlli — siz qiymat bergan paytda tur o'zi aniqlanadi. Bu type inference deyiladi.
const ism = "Jasur"; // TypeScript: bu string
const yosh = 25; // TypeScript: bu number
const faol = true; // TypeScript: bu boolean
Bu uch qatorda annotation yozish shart emas — TypeScript o'ng tomondagi qiymatga qarab o'zi biladi. Annotation yozsangiz ham ishlaydi, lekin ortiqcha.
Qachon annotation yozish kerak?
Annotation kerak bo'lgan holatlar:
O'zgaruvchi e'lon qilinsa, lekin keyinroq qiymat berilsa:
let natija: number; // ← hozir qiymat yo'q, keyinroq beriladi
// ...
natija = hisoblash();
Funksiya parametrlarida — TypeScript parametr turini o'zi bila olmaydi:
// ❌ — TypeScript a va b nima ekanini bilmaydi
function qoshish(a, b) {
return a + b; // string concat mi, son qo'shish mi?
}
// ✅ — aniq
function qoshish(a: number, b: number): number {
return a + b;
}
Annotation ortiqcha bo'lgan holatlar:
// ❌ Ortiqcha — TypeScript "Jasur" string ekanini allaqachon biladi
const ism: string = "Jasur";
// ✅ Yetarli
const ism = "Jasur";
Qoida: TypeScript o'zi tushunolsa — annotation yozmang. Tushunolmasa yoki aniq bo'lishi kerak bo'lsa — yozing.
Ob'ekt turi
Ob'ektning har bir xususiyatiga tur belgilanadi:
const foydalanuvchi: { ism: string; yosh: number; faol: boolean } = {
ism: "Jasur",
yosh: 25,
faol: true,
};
Bu yozuv uzun — keyingi darslarda type va interface bilan qisqartirish ko'riladi.
Ob'ekt ichida mavjud bo'lmagan xususiyatga murojaat qilish — xato:
console.log(foydalanuvchi.telefon);
// ❌ Property 'telefon' does not exist on type '{ ism: string; yosh: number; faol: boolean }'
Funksiya qaytish turi
Funksiya nima qaytarishini belgilash:
function salomlash(ism: string): string {
return `Salom, ${ism}!`;
}
function log(xabar: string): void {
console.log(xabar);
// qaytish qiymati yo'q — void
}
Qaytish turini ham ko'pincha TypeScript o'zi tushunadi:
function qoshish(a: number, b: number) {
return a + b; // TypeScript: bu number qaytaradi deb biladi
}
Lekin funksiya qaytish turini explicit yozish tavsiya etiladi — katta loyihalarda aniqlik uchun.
Array annotation
const sonlar: number[] = [1, 2, 3];
const ismlar: string[] = ["Ali", "Vali"];
const aralash: (number | string)[] = [1, "ikki", 3];
Hayotiy o'xshatma
Oshxonadagi taom idishlari. Idishga "faqat sho'rva" deb yozilsa — plov solib bo'lmaydi. TypeScript annotation — o'sha yozuv. O'zgaruvchiga "faqat number" deb annotation yozsangiz — matn solib bo'lmaydi.
Lekin idish ustiga hech narsa yozmasangiz ham — ichiga qarab tushunish mumkin. Inference — o'sha "ichiga qarab tushunish".
Tez-tez uchraydigan xatolar
Har joyga annotation yozish — keraksiz takror:
// ❌ — ortiqcha, TypeScript buni o'zi biladi
const x: number = 5;
const y: string = "salom";
const z: boolean = true;
// ✅ — faqat kerakli joyda
let natija: number;
function hisoblash(a: number, b: number): number { ... }
any ni annotation sifatida ishlatish — TypeScript ni o'chirish:
// ❌ — any = TypeScript ni o'chirib qo'yish
const qiymat: any = "nima bo'lsa ham";
qiymat.mavjud_bolmagan_metod(); // xato ko'rsatilmaydi!
any — TypeScript ning eng kuchsiz turi. Undan qochish kerak. Keyingi darslarda unknown bilan almashtirishni ko'ramiz.
Xulosa
Type annotation — : tur ko'rinishida yoziladi. O'zgaruvchi, funksiya parametri, qaytish qiymati.
TypeScript ko'p hollarda o'zi tushunadi (inference) — annotation yozish shart emas. Parametrlar va tushunarsiz holatlar uchun yozing.
any — oxirgi chora. Annotation o'rniga any yozish TypeScript ni befoyda qiladi.
Keyingi dars
4-dars: tsconfig.json asoslari — strict va muhim sozlamalar