Vai al contenuto
eLearner.app
Modulo 3 · Lezione 1 di 25/14 nel corso~12 min
Lezioni del modulo (1/2)

Funzioni tipizzate

Le funzioni sono i mattoni fondamentali di qualsiasi applicazione JavaScript. In TypeScript, possiamo annotare con precisione sia gli argomenti in ingresso che i valori di ritorno, rendendo le nostre interfacce e chiamate di funzione estremamente sicure e auto-documentate.


Parametri Opzionali e di Default

In JavaScript, ogni parametro è opzionale e, se non passato, assume il valore undefined. In TypeScript, per impostazione predefinita, ogni parametro dichiarato è obbligatorio.

Tuttavia, possiamo definire parametri opzionali usando il punto interrogativo (?), oppure specificare valori di default direttamente nella firma.

1. Parametri Opzionali

I parametri opzionali devono essere posizionati dopo i parametri obbligatori:

TS
function greetUser(name: string, title?: string): string {
  if (title) {
    return `Buongiorno ${title} ${name}`;
  }
  return `Ciao ${name}`;
}

2. Parametri di Default

Se non viene fornito un valore per un parametro con valore di default, TypeScript ne inferisce il tipo ed assegna il valore stabilito:

TS
function greetUserWithDefault(name: string, prefix: string = 'Ciao'): string {
  return `${prefix} ${name}`;
}

Parametri Rest (...args)

Quando vogliamo accettare un numero variabile di argomenti, possiamo usare l'operatore rest. In TypeScript, questi parametri devono essere tipizzati come un array:

TS
function sumAll(message: string, ...numbers: number[]): string {
  const total = numbers.reduce((sum, n) => sum + n, 0);
  return `${message} ${total}`;
}

Firme di Funzioni (Function Types)

Possiamo definire il tipo di una funzione in modo indipendente per poi riutilizzarlo nella dichiarazione di variabili o callback:

TS
// Definizione del tipo tramite alias
type MathOperation = (a: number, b: number) => number;

const add: MathOperation = (x, y) => x + y;
const multiply: MathOperation = (x, y) => x * y;

Questo approccio è fondamentale quando si passano funzioni come argomenti ad altre funzioni (callback).


Prova tu

Esercizio 1: Parametri Opzionali

Esercizio#ts.m3.l1.e1
Tentativi: 0Caricamento…

Crea una funzione chiamata formatName che accetta un parametro firstName (stringa) e un parametro opzionale lastName (stringa). Se lastName è fornito, restituisci 'firstName lastName', altrimenti restituisci solo 'firstName'.

Caricamento editor…
Mostra suggerimento

Ricorda che il parametro opzionale si dichiara con lastName?: string dopo quello obbligatorio.

Soluzione disponibile dopo 3 tentativi

Esercizio 2: Parametri Default

Esercizio#ts.m3.l1.e2
Tentativi: 0Caricamento…

Crea una funzione chiamata power che accetta una base (numero) e un exponent (numero con valore di default uguale a 2). La funzione deve calcolare e restituire il valore di base elevato all'esponente (usa Math.pow).

Caricamento editor…
Mostra suggerimento

Usa base: number ed exponent: number = 2 all'interno della firma della funzione.

Soluzione disponibile dopo 3 tentativi

Esercizio 3: Firma della Funzione

Esercizio#ts.m3.l1.e3
Tentativi: 0Caricamento…

Definisci un type alias chiamato BinaryOp che descrive una funzione che accetta due parametri di tipo numero e restituisce un numero. Successivamente, dichiara una costante chiamata sum di tipo BinaryOp che implementa l'addizione.

Caricamento editor…
Mostra suggerimento

La sintassi per il tipo funzione è (a: number, b: number) => number.

Soluzione disponibile dopo 3 tentativi

Esercizio 4: Funzione Callback

Esercizio#ts.m3.l1.e4
Tentativi: 0Caricamento…

Crea una funzione chiamata processItems che accetta due parametri: items (un array di stringhe) e callback (una funzione che accetta una singola stringa e non restituisce nulla, cioè void). La funzione deve eseguire un ciclo for...of su ciascun elemento di items e passarlo alla callback.

Caricamento editor…
Mostra suggerimento

Dichiara la firma come processItems(items: string[], callback: (item: string) => void): void e usa un ciclo per chiamare la callback.

Soluzione disponibile dopo 3 tentativi