- Parametrlərə və qaytarılan qiymətə tip yazmaq
- Qeyri-məcburi, susmaya görə və rest parametrlərdən istifadə etmək
(a: number) => numberkimi funksiya tipləri yazmaq və kontekstdən tip çıxarışını başa düşməkvoidvənevertiplərinin mənasını bilmək
Funksiya bir növ müqavilədir: nə qəbul edir və nə qaytarır. JavaScript-də bu müqavilə yalnız proqramçının yaddaşında və ya şərhlərdə yaşayır, şərhlər isə tez köhnəlir. TypeScript-də müqavilə funksiyanın başlığında yazılır və kompilyator ona hər çağırışda əməl olunduğunu yoxlayır — həm funksiyanı yazanda, həm də ondan istifadə edəndə.
Parametrlər və qaytarılan qiymət
Hər parametrin tipi adından sonra iki nöqtə ilə yazılır. Qaytarılan qiymətin tipi isə mötərizədən sonra gəlir. Aşağıdakı funksiya restoranda çaypulunu hesablayır:
function calculateTip(bill: number, percent: number): number {
return (bill * percent) / 100;
}
const tip = calculateTip(40, 15);
console.log(`Tip: ${tip} AZN`);Tip: 6 AZN
Kompilyator müqavilənin hər iki tərəfini yoxlayır. Çağıran tərəf bütün arqumentləri düzgün tiplə verməlidir, funksiyanın gövdəsi isə vəd etdiyi tipi qaytarmalıdır:
function calculateTip(bill: number, percent: number): number {
return (bill * percent) / 100;
}
calculateTip(40);
function isAdult(age: number): boolean {
if (age >= 18) {
return 'yes';
}
return false;
}tip.ts:5:1 - error TS2554: Expected 2 arguments, but got 1.
5 calculateTip(40);
~~~~~~~~~~~~
tip.ts:1:37
1 function calculateTip(bill: number, percent: number): number {
~~~~~~~~~~~~~~~
An argument for 'percent' was not provided.
tip.ts:9:5 - error TS2322: Type 'string' is not assignable to type 'boolean'.
9 return 'yes';
~~~~~~Qeyri-məcburi, susmaya görə və rest parametrlər
- Qeyri-məcburi parametr adından sonra
?ilə yazılır:greeting?: string. Onun tipi əslindəstring | undefined-dır, yəni verilməyə də bilər. - Susmaya görə qiyməti olan parametr (
currency = 'AZN') tipini həmin qiymətdən alır — buradastring. Arqument verilməsə, bu qiymət işlədilir. - Rest parametr (
...numbers: number[]) istənilən sayda arqumenti massivə yığır. - Qeyri-məcburi parametrlər məcburi parametrlərdən sonra gəlməlidir.
function greet(name: string, greeting?: string): string {
return `${greeting ?? 'Hello'}, ${name}!`;
}
function price(amount: number, currency = 'AZN'): string {
return `${amount.toFixed(2)} ${currency}`;
}
function sum(...numbers: number[]): number {
return numbers.reduce((total, n) => total + n, 0);
}
console.log(greet('Murad'));
console.log(greet('Murad', 'Salam'));
console.log(price(12.5), '|', price(12.5, 'USD'));
console.log(sum(1, 2, 3), sum());Hello, Murad! Salam, Murad! 12.50 AZN | 12.50 USD 6 0
?? operatoru greeting verilməyəndə 'Hello' qiymətini götürür.Qeyri-məcburi parametr undefined ola bildiyi üçün TypeScript onu yoxlamadan istifadə etməyə icazə vermir. greet funksiyasında biz ?? ilə ehtiyat qiymət vermişdik; bunu unutsaq, belə olar:
function shout(name: string, greeting?: string): string {
return `${greeting.toUpperCase()}, ${name}!`;
}shout.ts:2:13 - error TS18048: 'greeting' is possibly 'undefined'.
2 return `${greeting.toUpperCase()}, ${name}!`;
~~~~~~~~Funksiya tipləri
JavaScript-də funksiyalar adi qiymətlərdir: onları dəyişənə yazmaq və başqa funksiyaya arqument kimi ötürmək olar. Deməli, funksiyanın da tipi var. Funksiya tipi ox sintaksisi ilə yazılır: (a: number, b: number) => number — «iki ədəd qəbul edən və ədəd qaytaran funksiya». Belə tipə type ilə ad vermək rahatdır.
type Operation = (a: number, b: number) => number;
const add: Operation = (a, b) => a + b;
const multiply: Operation = (a, b) => a * b;
function calculate(x: number, y: number, op: Operation): number {
return op(x, y);
}
console.log(calculate(6, 7, add));
console.log(calculate(6, 7, multiply));
console.log([1, 2, 3].map((n) => n * 10));13 42 [ 10, 20, 30 ]
Diqqət et: add funksiyasında a və b üçün tip yazmamışıq, amma səhv də yoxdur. Bu, kontekstdən tip çıxarışıdır (contextual typing): funksiya Operation tipli dəyişənə yazıldığı üçün TypeScript parametrlərin number olduğunu bilir. map üçün də eynidir: massiv ədədlərdən ibarət olduğundan n avtomatik number olur.
| Tip | Mənası | Nümunə |
|---|---|---|
void | funksiya faydalı heç nə qaytarmır | function log(msg: string): void |
never | funksiya heç vaxt normal başa çatmır — məsələn, həmişə xəta atır | function fail(msg: string): never |
| funksiya tipi | parametrlər və qaytarılan tip | (a: number, b: number) => number |
Əsas fikirlər
- Parametrlərin tipi adlarından sonra, qaytarılan tip isə mötərizədən sonra yazılır.
- Kompilyator arqumentlərin sayını və tipini, gövdədə isə qaytarılan qiyməti yoxlayır.
x?: Tqeyri-məcburidir vəT | undefinedtiplidir;x = qiymətsusmaya görə qiymətdir;...xs: T[]rest parametrdir.- Funksiya tipi ox ilə yazılır:
(a: number, b: number) => number; kontekstdən tip çıxarışı parametrlərin tipini özü tapır. void— heç nə qaytarmır,never— heç vaxt normal başa çatmır.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.
(a: number, b: number) => number tipi nəyi təsvir edir?