Funksiyaların həddən artıq yüklənməsi TypeScript-də
Bəzən elə funksiyalar olur ki, qaytardıqları dəyərlərin tipi ötürülən parametrlərdən asılı olur. Bunun üçün TypeScript-də funksiyaların həddən artıq yüklənməsi istifadə olunur. Bu, funksiyanın müxtəlif imza variantlarını göstərməyə imkan verir.
Gəlin bir nümunəyə baxaq. Tutaq ki, bizim sətirin simvollarını hərflər massivinə ayıran bir funksiyamız var:
function splitStr(str: string): string[] {
return str.split('');
}
Tutaq ki, bizim həmçinin ədədin rəqəmlərini rəqəmlər massivinə ayıran bir funksiyamız var:
function splitNum(num: number): number[] {
let str: string = String(num);
let arr: string[] = str.split('');
return arr.map(elem => +elem);
}
Gəlin hər iki funksiyanı birində birləşdirək. Yeni funksiya parametrin tipindən asılı olaraq ya rəqəmlər massivi, ya da sətirlər massivi qaytarmalıdır.
Funksiyamızın müxtəlif imzalarını elan etmək üçün həddən artıq yüklənmədən istifadə edək:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
// hər iki imzanın reallaşdırılması
}
İndi funksiyanın reallaşdırılmasını yazaq. Onun kodunda şərtlə müəyyən etməliyik ki, funksiyanın imzalarından hansı işləyib və bundan asılı olaraq lazımi tip nəticəsi ilə lazımi kodu işə salaq:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
if (typeof val === 'string') {
return val.split('');
} else {
let str: string = String(val);
let arr: string[] = str.split('');
return arr.map((elem: string): number => +elem);
}
}
Digər dillərdən fərqli olaraq, TypeScript-də həddən artıq yüklənmədə bir funksiya yaradılır. Eyni adla, lakin fərqli imzalara malik bir neçə funksiya etmək olmaz.
DOM elementinin mətnini qaytaran və ya dəyişən bir funksiya yazın. O, aşağıdakı kimi işləməlidir:
text('#elem', 'text'); // mətni təyin edəcək
text('#elem'); // cari mətni qaytaracaq