Optional, default va rest parametrlar TypeScript da

~15 daq · TypeScript · Funksiyalar

Salomlash funksiyasi — tilni ham ko'rsatish mumkin, lekin ko'rsatilmasa o'zbek tilida ishlashi kerak. Yoki nechta argument berilishini bilmaysiz — hammasi yig'ilishi kerak.

Bu uch holat uchun TypeScript da uch xil parametr turi bor: optional, default, rest.


Optional parametr — ?

Parametr berilishi ham, berilmasligi ham mumkin. ? bilan belgilanadi:

function salomlash(ism: string, til?: string): string {
  if (til === "en") return `Hello, ${ism}!`;
  return `Salom, ${ism}!`;
}

salomlash("Jasur");       // ✅ — "Salom, Jasur!"
salomlash("Jasur", "en"); // ✅ — "Hello, Jasur!"

Optional parametr ichida string | undefined bo'ladi — ishlatishdan oldin tekshirish kerak:

function formatlash(matn: string, katta?: boolean): string {
  return katta ? matn.toUpperCase() : matn;
  // katta: boolean | undefined
  // undefined falsy — if/ternary da xavfsiz
}

Default parametr — standart qiymat

Parametr berilmasa — standart qiymat ishlatiladi:

function salomlash(ism: string, til: string = "uz"): string {
  if (til === "en") return `Hello, ${ism}!`;
  if (til === "ru") return `Привет, ${ism}!`;
  return `Salom, ${ism}!`;
}

salomlash("Jasur");        // "Salom, Jasur!"   — til = "uz"
salomlash("Jasur", "en"); // "Hello, Jasur!"
salomlash("Jasur", "ru"); // "Привет, Jasur!"

Default parametr turi annotatsiyasiz ham aniqlanadi — "uz" berilsa, TypeScript string ekanini tushunadi.

Optional (?) vs default — farqi:

til?: string          →  undefined bo'lishi mumkin, tekshirish kerak
til: string = "uz"   →  har doim string, standart "uz"

Rest parametr — noma'lum sondagi argumentlar

... bilan belgilanadi — barcha qolgan argumentlar massiv sifatida keladi:

function yig_indirma(...sonlar: number[]): number {
  return sonlar.reduce((jami, son) => jami + son, 0);
}

yig_indirma(1, 2, 3);          // 6
yig_indirma(10, 20, 30, 40);   // 100
yig_indirma();                 // 0 — bo'sh massiv

Rest parametr oxirida bo'lishi shart:

function xabar(sarlavha: string, ...qatorlar: string[]): void {
  console.log(sarlavha);
  qatorlar.forEach(q => console.log(" -", q));
}

xabar("Xatolar:", "email noto'g'ri", "parol qisqa", "ism bo'sh");
// Xatolar:
//  - email noto'g'ri
//  - parol qisqa
//  - ism bo'sh

Parametrlar tartibi

majburiy → default → optional → rest
function fn(
  a: string,          // majburiy
  b: number  = 0,     // default
  c?: boolean,        // optional
  ...d: string[]      // rest
): void { ... }

Destructuring parametr

Ob'ekt parametrida destructuring ishlatish mumkin:

function profil({ ism, yosh = 18 }: { ism: string; yosh?: number }): string {
  return `${ism}, ${yosh} yosh`;
}

profil({ ism: "Jasur" });         // "Jasur, 18 yosh"
profil({ ism: "Vali", yosh: 25 }); // "Vali, 25 yosh"

Tez-tez uchraydigan xatolar

Optional parametrdan keyin majburiy parametr:

function fn(a?: string, b: number): void { ... }
// ❌ — A required parameter cannot follow an optional parameter

Optional va default parametrlar oxirida bo'lishi kerak.

Rest parametr o'rtada:

function fn(...a: string[], b: number): void { ... }
// ❌ — A rest parameter must be last in a parameter list

Xulosa

ism: string          — majburiy
ism?: string         — optional (string | undefined)
ism: string = "uz"   — default qiymat (har doim string)
...ismlar: string[]  — rest (nechta bo'lsa ham)
function fn(
  majburiy: string,
  default_:  number = 0,
  optional?: boolean,
  ...rest:   string[]
): void { ... }

Keyingi dars

24-dars: Function overload — bir nom, turli imzo