TypeScript / Функцийн төрлүүд

Функцийн төрлүүд

TypeScript-д функцийн параметр ба буцаах утгыг тодорхойлох нь кодын найдвартай байдлыг эрс нэмэгдүүлдэг. Энэ хичээлд функцтэй холбоотой бүх төрлийн тодорхойлолтыг сурна.

Параметр ба буцаах утгын төрөл

Хамгийн энгийн хэлбэр: параметр тус бүрд төрөл зааж, : буцаах_төрөл нэмнэ:

typescript
// Параметр ба буцаах утгын төрлийг зааж өгөх
function нэмэх(а: number, б: number): number {
  return а + б;
}

function мэндчилэх(нэр: string): string {
  return `Сайн уу, ${нэр}!`;
}

// Буцаах утга байхгүй функц — void ашиглана
function хэвлэх(утга: string): void {
  console.log(утга);
}

// Хэзээ ч буцдаггүй функц — never ашиглана
function алдаа_хая(мессеж: string): never {
  throw new Error(мессеж);
}

void нь "юу ч буцааж өгдөггүй" гэсэн утгатай. never нь "энэ функц хэзээ ч дуусдаггүй" гэсэн утгатай — exception шидэх эсвэл төгсгөлгүй loop байх үед хэрэглэнэ.

Optional ба default параметр

Заавал дамжуулахгүй байж болох параметрүүдийг тодорхойлж болно:

typescript
// Optional параметр — ? тэмдэг ашиглана
function бүртгэх(нэр: string, нас?: number): string {
  if (нас !== undefined) {
    return `${нэр}, ${нас} настай`;
  }
  return нэр;
}

бүртгэх("Болд"); // "Болд"
бүртгэх("Болд", 25); // "Болд, 25 настай"

// Default параметр — утга өгч болно
function мэндчилэх(нэр: string, хэл: string = "Монгол"): string {
  return `${хэл} хэлээр сайн уу, ${нэр}!`;
}

мэндчилэх("Болд"); // "Монгол хэлээр сайн уу, Болд!"
мэндчилэх("Болд", "Англи"); // "Англи хэлээр сайн уу, Болд!"

Optional параметрүүд заавал сүүлд байх ёстой — function foo(а?: number, б: string) буруу.

Rest параметр

Тодорхойгүй тооны параметр авах үед ... ашиглана:

typescript
// Rest параметр
function нийлбэр(...тоонууд: number[]): number {
  return тоонууд.reduce((нийт, тоо) => нийт + тоо, 0);
}

console.log(нийлбэр(1, 2, 3)); // 6
console.log(нийлбэр(10, 20, 30, 40)); // 100

// Энгийн параметртэй хослуулах
function лог(түвшин: string, ...мессежүүд: string[]): void {
  мессежүүд.forEach((м) => console.log(`[${түвшин}] ${м}`));
}

лог("INFO", "Сервер эхэллээ", "Порт: 3000");

Function type тодорхойлох

Функцийг хувьсагчид хадгалах эсвэл параметрт дамжуулах үед төрлийг тодорхойлж болно:

typescript
// Хувьсагчид функц хадгалах
const үржих: (а: number, б: number) => number = (а, б) => а * б;

// type ашиглан функцийн төрлийг нэрлэх
type Тооцоолол = (а: number, б: number) => number;

const нэмэх: Тооцоолол = (а, б) => а + б;
const хасах: Тооцоолол = (а, б) => а - б;

// Callback функцийн төрөл
function массив_боловсруулах(
  тоонууд: number[],
  callback: (тоо: number) => number,
): number[] {
  return тоонууд.map(callback);
}

const хоёр_дахин = массив_боловсруулах([1, 2, 3], (х) => х * 2);
console.log(хоёр_дахин); // [2, 4, 6]

interface-д функц тодорхойлох

interface дотор функцийн гарын үсгийг тодорхойлж болно:

typescript
interface Тооны_үйлдэл {
  нэмэх(а: number, б: number): number;
  хасах(а: number, б: number): number;
  үржих(а: number, б: number): number;
}

const тоо: Тооны_үйлдэл = {
  нэмэх: (а, б) => а + б,
  хасах: (а, б) => а - б,
  үржих: (а, б) => а * б,
};

console.log(тоо.нэмэх(5, 3)); // 8
console.log(тоо.үржих(4, 7)); // 28

Функцийн төрлийг зөв тодорхойлох нь IDE-д автоматаар дуусгах (autocomplete) ажиллуулж, кодын алдааг хурдан илрүүлэхэд тусалдаг.

Дараагийн хичээлд:

Function Overloading — нэг нэртэй, өөр өөр параметртэй олон хувилбар функц бичих аргыг сурна.