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
...values — rest parametr. Uning tipi massiv shaklida yoziladi,
chunki barcha argumentlar massivga yig’iladi.
Amaliy mashq
calculateDiscount(price: number, percent: number): numberfunksiyasini yozing va uni to’g’ri argumentlar bilan chaqiring;- Shu funksiyani bitta argument bilan chaqirib,
TS2554xatosini o’qing; voidqaytaradigan funksiya yozib, uning natijasini o’zgaruvchiga berishga urinib ko’ring;greetingparametriga standart qiymat bering va funksiyani ikki xil usulda chaqiring;- Ixtiyoriy parametrni majburiysidan oldin qo’yib,
TS1016xatosini chaqiring; type Formatter = (value: number) => stringtipini 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) => stringko’rinishida tip sifatida yoziladi va boshqa funksiyaga uzatiladi.
Keyingi darsda union va literal — bir nechta tipdan birini qabul qilish va tipni toraytirish.