Функцийн төрлүүд
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 параметр
Заавал дамжуулахгүй байж болох параметрүүдийг тодорхойлж болно:
// Optional параметр — ? тэмдэг ашиглана
function бүртгэх(нэр: string, нас?: number): string {
if (нас !== undefined) {
return `${нэр}, ${нас} настай`;
}
return нэр;
}
бүртгэх("Болд"); // "Болд"
бүртгэх("Болд", 25); // "Болд, 25 настай"
// Default параметр — утга өгч болно
function мэндчилэх(нэр: string, хэл: string = "Монгол"): string {
return `${хэл} хэлээр сайн уу, ${нэр}!`;
}
мэндчилэх("Болд"); // "Монгол хэлээр сайн уу, Болд!"
мэндчилэх("Болд", "Англи"); // "Англи хэлээр сайн уу, Болд!"
Optional параметрүүд заавал сүүлд байх ёстой — function foo(а?: number, б: string) буруу.
Rest параметр
Тодорхойгүй тооны параметр авах үед ... ашиглана:
// 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 тодорхойлох
Функцийг хувьсагчид хадгалах эсвэл параметрт дамжуулах үед төрлийг тодорхойлж болно:
// Хувьсагчид функц хадгалах
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 дотор функцийн гарын үсгийг тодорхойлж болно:
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 — нэг нэртэй, өөр өөр параметртэй олон хувилбар функц бичих аргыг сурна.