Funksiya parametr va qaytish turlari

~15 daq · TypeScript · Funksiyalar

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