Type annotation — qachon va qayerda yoziladi

~15 daq · TypeScript · Kirish

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