Lecții din modul (1/2)
Funcții tipizate
Funcțiile sunt elementele fundamentale ale oricărei aplicații JavaScript. În TypeScript, putem adnota cu precizie atât argumentele de intrare, cât și valorile returnate, făcând interfețele noastre și apelurile de funcții extrem de sigure și auto-documentate.
Parametri opționali și impliciti
În JavaScript, fiecare parametru este opțional și este implicit undefined dacă este omis. În TypeScript, în mod implicit, fiecare parametru declarat este obligatoriu.
Cu toate acestea, putem defini parametri opționali folosind semnul întrebării (?) sau să specificăm valorile implicite direct în semnătura funcției.
1. Parametri opționali
Parametrii opționali trebuie poziționați după toți parametrii obligatorii:
function greetUser(name: string, title?: string): string {
if (title) {
return `Good morning ${title} ${name}`;
}
return `Hello ${name}`;
}2. Parametrii impliciti
Dacă nu este furnizată nicio valoare pentru un parametru cu o valoare implicită, TypeScript deduce tipul acestuia și atribuie valoarea implicită specificată:
function greetUserWithDefault(name: string, prefix: string = 'Hello'): string {
return `${prefix} ${name}`;
}Parametrii de odihnă (...args)
Când dorim să acceptăm un număr variabil de argumente, putem folosi operatorul rest. În TypeScript, acești parametri trebuie să fie tastați ca o matrice:
function sumAll(message: string, ...numbers: number[]): string {
const total = numbers.reduce((sum, n) => sum + n, 0);
return `${message} ${total}`;
}Tipuri de funcții (semnături de apel)
Putem defini independent tipul unei funcții și apoi o putem reutiliza în declarații de variabile sau argumente de apel invers:
// Define function type using type alias
type MathOperation = (a: number, b: number) => number;
const add: MathOperation = (x, y) => x + y;
const multiply: MathOperation = (x, y) => x * y;Această abordare este esențială atunci când se transmit funcții ca argumente altor funcții (callbacks).
Încercați-l singur
Exercițiul 1: Parametrii opționali
Creați o funcție numită formatName care acceptă un parametru firstName (șir) și un parametru opțional lastName (șir). Dacă este furnizat lastName, returnați „firstName lastName”, în caz contrar returnați doar „firstName”.
Afișează indiciu
Rețineți că parametrul opțional este declarat folosind lastName?: șir după cel obligatoriu.
Soluție disponibilă după 3 încercări
Exercițiul 2: Parametrii impliciti
Creați o funcție numită putere care acceptă o bază (număr) și un exponent (număr cu o valoare implicită de 2). Funcția trebuie să calculeze și să returneze valoarea bazei crescută la exponent (utilizați Math.pow).
Afișează indiciu
Utilizați baza: număr și exponent: număr = 2 în semnătura funcției.
Soluție disponibilă după 3 încercări
Exercițiul 3: Semnătura funcției
Definiți un alias de tip numit BinaryOp care descrie o funcție care acceptă doi parametri numerici și returnează un număr. Apoi, declarați o constantă numită sumă de tip BinaryOp care implementează adăugarea.
Afișează indiciu
Sintaxa pentru un tip de funcție este (a: număr, b: număr) => număr.
Soluție disponibilă după 3 încercări
Exercițiul 4: Funcția de apel invers
Creați o funcție numită processItems care acceptă doi parametri: itemi (o matrice de șiruri) și callback (o funcție care acceptă un singur șir și nu returnează nimic, adică void). Funcția trebuie să ruleze o buclă for...of peste fiecare element din elemente și să o transmită callback-ului.
Afișează indiciu
Declarați semnătura ca processItems(items: șir[], callback: (item: șir) => void): void și utilizați o buclă pentru a apela callback.
Soluție disponibilă după 3 încercări