Salt la conținutul principal
Modulul 3 · Lecția 1 din 25/14 în curs~12 min
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:

TS
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ă:

TS
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:

TS
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:

TS
// 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

Exercițiu#ts.m3.l1.e1
Încercări: 0Se încarcă…

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”.

Se încarcă editorul...
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

Exercițiu#ts.m3.l1.e2
Încercări: 0Se încarcă…

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).

Se încarcă editorul...
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

Exercițiu#ts.m3.l1.e3
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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

Exercițiu#ts.m3.l1.e4
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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