Ֆունկցիաների բեռնաթափում TypeScript-ում
Երբեմն հանդիպում են ֆունկցիաներ, որոնք վերադարձնում են արժեքներ, որոնց տեսակը կախված է փոխանցված պարամետրերից: Դրա համար TypeScript-ում օգտագործում են բեռնաթափում ֆունկցիաների: Այն թույլ է տալիս նշել ֆունկցիայի տարբեր սիգնատուրաների տարբերակներ:
Դիտարկենք օրինակով: Ենթադրենք, մենք ունենք ֆունկցիա, որը բաժանում է տողի նիշերը տառերի զանգվածի:
function splitStr(str: string): string[] {
return str.split('');
}
Ենթադրենք, մենք ունենք նաև ֆունկցիա, որը բաժանում է թվի նիշերը թվանշանների զանգվածի:
function splitNum(num: number): number[] {
let str: string = String(num);
let arr: string[] = str.split('');
return arr.map(elem => +elem);
}
Եկեք միավորենք երկու ֆունկցիաները մեկի մեջ: Նոր ֆունկցիան, կախված պարամետրի տեսակից, պետք է վերադարձնի կամ թվերի զանգված, կամ տողերի զանգված:
Օգտագործենք բեռնաթափումը, որպեսզի հայտարարենք մեր ֆունկցիայի տարբեր սիգնատուրաներ:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
// երկու սիգնատուրաների իրականացում
}
Այժմ գրենք ֆունկցիայի իրականացումը: Դրա կոդում մենք պետք է պայմանով որոշենք, թե ֆունկցիայի սիգնատուրաներից որն է աշխատել, և կախված դրանից, գործարկենք անհրաժեշտ կոդը՝ անհրաժեշտ տեսակի արդյունքով:
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);
}
}
Ի տարբերություն այլ լեզուների, TypeScript-ում բեռնաթափման ժամանակ ստեղծվում է մեկ ֆունկցիա: Հնարավոր չէ ստեղծել մի քանի ֆունկցիա մեկ անունով, բայց տարբեր սիգնատուրաներով:
Գրեք ֆունկցիա, որը կվերադարձնի կամ կփոխի DOM տարրի տեքստը: Այն պետք է աշխատի հետևյալ կերպ.
text('#elem', 'text'); // կսահմանի տեքստը
text('#elem'); // կվերադարձնի ընթացիկ տեքստը