TypeScript funksiya tiplari va parametrlar

Funksiya — tip eng ko’p foyda beradigan joy. Sababi mantiqiy: qiymat funksiyaga tashqaridan keladi va u yerda nima bo’lishini funksiya o’zi nazorat qila olmaydi.

Bu darsda parametrlar, qaytish qiymati va funksiyaning o’zini tip sifatida ishlatishni ko’ramiz.

Parametr va qaytish tipi

function calculateTotal(price: number, quantity: number): number {
  return price * quantity;
}

console.log(calculateTotal(15000, 3));
45000

Yozuvni qismlarga ajratamiz:

Qism Ma’nosi
price: number Birinchi parametr son bo’lishi kerak
quantity: number Ikkinchi parametr ham son
): number { Funksiya son qaytaradi

Argument soni ham tekshiriladi:

console.log(calculateTotal(15000));
example.ts(4,13): error TS2554: Expected 2 arguments, but got 1.

Oldingi darslardagi NaN muammosi aynan shu yerda to’xtaydi.

Qaytish tipini yozish shartmi

Shart emas — TypeScript uni return dan o’zi aniqlaydi:

// Qaytish tipi yozilmadi, TypeScript uni number deb biladi
function calculateTotal(price: number, quantity: number) {
  return price * quantity;
}

void — hech narsa qaytarmaydigan funksiya

Ba’zi funksiyalar qiymat qaytarmaydi, faqat ish bajaradi:

function logMessage(message: string): void {
  console.log(`[LOG] ${message}`);
}

logMessage("Server ishga tushdi");
[LOG] Server ishga tushdi

Natijani ishlatishga urinsangiz, xato chiqadi:

const result: string = logMessage("salom");
example.ts(4,7): error TS2322: Type 'void' is not assignable to type 'string'.

Standart qiymatli parametr

Parametrga oldindan qiymat berish mumkin:

function greet(name: string, greeting: string = "Salom"): string {
  return `${greeting}, ${name}!`;
}

console.log(greet("Aziz"));
console.log(greet("Malika", "Xayrli tong"));
Salom, Aziz!
Xayrli tong, Malika!

greeting ga tip yozilgan, lekin u ham ortiqcha: TypeScript standart qiymatdan uni string deb biladi. greeting = "Salom" yozuvi yetarli.

Ixtiyoriy parametr

Standart qiymat mos kelmasa, parametrni ? bilan ixtiyoriy qilish mumkin:

function buildLabel(name: string, title?: string): string {
  if (title === undefined) {
    return name;
  }
  return `${title} ${name}`;
}

console.log(buildLabel("Aziz"));
console.log(buildLabel("Aziz", "Dr."));
Aziz
Dr. Aziz

title? aslida title: string | undefined degani — shuning uchun uni ishlatishdan oldin tekshirish kerak.

Ixtiyoriy yoki standart qiymat — qaysi biri

Holat Tanlov
Mantiqiy standart qiymat bor greeting = "Salom"
Qiymat yo’qligining o’zi ma’noli title?: string

greeting uchun “Salom” tabiiy standart. title uchun esa standart yo’q: unvon bor yoki yo’q, o’rtasi yo’q.

Arrow funksiya

Yozuv bir xil qoidaga bo’ysunadi:

const double = (value: number): number => value * 2;
console.log(double(21));
42

Arrow funksiyalar darsidagi sintaksis o’zgarmadi, faqat tiplar qo’shildi.

Funksiyaning o’zi tip sifatida

Funksiyani boshqa funksiyaga uzatish kerak bo’lsa, uning shaklini tavsiflash kerak:

type Formatter = (value: number) => string;

const asPrice: Formatter = (value) => `${value} so'm`;
console.log(asPrice(15000));
15000 so'm

(value: number) => string yozuvi: “son qabul qiladi, matn qaytaradi” degani. Diqqat qiling — bu yerda => tip yozuvining bir qismi, arrow funksiya emas.

asPrice ichida value ga tip yozilmadi: TypeScript uni Formatter dan oldi.

Funksiyani parametr sifatida qabul qilish

function applyAll(
  values: number[],
  transform: (value: number) => number
): number[] {
  return values.map(transform);
}

console.log(applyAll([1, 2, 3], (value) => value * 10));
[ 10, 20, 30 ]

Bu yozuv map, filter va reduce kabi metodlar ichida qanday ishlashini ochib beradi. Massiv metodlari darsida ularni ishlatgansiz — endi ularning tipi qanday e’lon qilinishini ko’rdingiz.

Cheksiz parametrlar

function sumAll(...values: number[]): number {
  return values.reduce((total, value) => total + value, 0);
}

console.log(sumAll(1, 2, 3, 4));
10

...valuesrest parametr. Uning tipi massiv shaklida yoziladi, chunki barcha argumentlar massivga yig’iladi.

Amaliy mashq

  1. calculateDiscount(price: number, percent: number): number funksiyasini yozing va uni to’g’ri argumentlar bilan chaqiring;
  2. Shu funksiyani bitta argument bilan chaqirib, TS2554 xatosini o’qing;
  3. void qaytaradigan funksiya yozib, uning natijasini o’zgaruvchiga berishga urinib ko’ring;
  4. greeting parametriga standart qiymat bering va funksiyani ikki xil usulda chaqiring;
  5. Ixtiyoriy parametrni majburiysidan oldin qo’yib, TS1016 xatosini chaqiring;
  6. type Formatter = (value: number) => string tipini e’lon qilib, unga mos ikkita turli funksiya yozing.

5-qadam eng muhimi: parametr tartibi qoidasini bir marta xato qilib ko’rish uni yodda saqlashning eng ishonchli yo’li.

Qisqacha xulosa

  • Parametr tipi majburiy, qaytish tipi ixtiyoriy — lekin uni yozish xatoni funksiya ichida ushlaydi.
  • TypeScript argument sonini ham tekshiradi (TS2554).
  • void — qiymat qaytarmaydigan funksiya tipi; natijasiga tayanilmaydi.
  • Standart qiymat mantiqiy bo’lsa = qiymat, qiymat yo’qligi ma’noli bo’lsa ? ishlatiladi.
  • Ixtiyoriy parametr ro’yxat oxirida turadi (TS1016).
  • Funksiya shakli (value: number) => string ko’rinishida tip sifatida yoziladi va boshqa funksiyaga uzatiladi.

Keyingi darsda union va literal — bir nechta tipdan birini qabul qilish va tipni toraytirish.

Bu dars foydali bo'ldimi?

marta ko'rildi