Funksiya parametr va qaytish turlari
Foydalanuvchini salomlash funksiyasi yozilgan:
function salomlash(ism) {
return "Salom, " + ism + "!";
}
salomlash(42); // "Salom, 42!" — xato emas, lekin mantiqsiz
salomlash(); // "Salom, undefined!" — argument unutildi
TypeScript funksiya parametrlariga va qaytish turiga annotatsiya yozishni talab qiladi — shunda noto'g'ri chaqirish yozilayotganda ko'rinadi.
Parametr turi
Har bir parametrga tur beriladi:
function salomlash(ism: string): string {
return "Salom, " + ism + "!";
}
salomlash("Jasur"); // ✅
salomlash(42); // ❌ Argument of type 'number' is not assignable to type 'string'
salomlash(); // ❌ Expected 1 arguments, but got 0
Qaytish turi
Ikki nuqta va tur qavsdan keyin yoziladi:
function qoshish(a: number, b: number): number {
return a + b;
}
function salomlash(ism: string): string {
return `Salom, ${ism}!`;
}
function logla(xabar: string): void {
console.log(xabar); // hech narsa qaytarmaydi
}
Qaytish turi ko'p holda TypeScript o'zi tushunadi — lekin yozish kodning niyatini aniq ko'rsatadi va noto'g'ri qaytishni to'xtatadi:
function son(): number {
return "salom"; // ❌ — string emas, number qaytish kerak
}
Arrow funksiya
const qoshish = (a: number, b: number): number => a + b;
const salomlash = (ism: string): string => `Salom, ${ism}!`;
Ob'ekt parametr
function profil(user: { ism: string; yosh: number }): string {
return `${user.ism}, ${user.yosh} yosh`;
}
profil({ ism: "Jasur", yosh: 25 }); // ✅
profil({ ism: "Jasur" }); // ❌ — yosh yetishmayapti
Yoki interface bilan:
interface Foydalanuvchi { ism: string; yosh: number; }
function profil(user: Foydalanuvchi): string {
return `${user.ism}, ${user.yosh} yosh`;
}
Bir nechta qaytish varianti — union
Ba'zan funksiya turli turlar qaytarishi mumkin:
function qidirish(id: number): Foydalanuvchi | null {
const user = db.find(id);
return user ?? null; // topilsa Foydalanuvchi, topilmasa null
}
const user = qidirish(1);
user.ism; // ❌ — null bo'lishi mumkin
if (user !== null) {
user.ism; // ✅
}
never — funksiya hech qachon tugamaydi
function xatoTashla(xabar: string): never {
throw new Error(xabar);
}
function cheksizSikl(): never {
while (true) { /* ... */ }
}
Tez-tez uchraydigan xatolar
Qaytish turini noto'g'ri belgilash:
function yosh(sana: Date): string {
return new Date().getFullYear() - sana.getFullYear();
// ❌ — number qaytaryapti, string belgilangan
}
void o'rniga undefined yozish:
function logla(): undefined { // ❌ — undefined ni qaytarish kerak bo'ladi
console.log("salom");
}
function logla(): void { // ✅ — hech narsa qaytarmaslik
console.log("salom");
}
void — "natijaga e'tibor berma". undefined — "aynan undefined qaytarishi kerak".
Xulosa
function fn(
a: string, // parametr turi
b: number, // parametr turi
): boolean { // qaytish turi
return a.length > b;
}
// Arrow
const fn = (a: string, b: number): boolean => a.length > b;
// Qaytish turlari
: string — matn
: number — son
: boolean — mantiqiy
: void — hech narsa qaytarmaydi
: T | null — T yoki null
: never — hech qachon tugamaydi
Keyingi dars
23-dars: Optional, default va rest parametrlar TypeScript da