0Pricing
TypeScript Academy · Lezione

Funzioni predicato per i type guard definiti dall'utente

Scriva predicati is per creare type guard personalizzati.

Funzioni predicato per i type guard definiti dall'utente è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento TypeScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso TypeScript Academy include 4 lezioni in totale.

Benvenuto

Le type guard definite dall'utente consentono di incapsulare un controllo di restringimento in una funzione riutilizzabile, utilizzando il tipo restituito predicato `is`.

Il tipo restituito predicato is

Una funzione type guard restituisce `paramName is Type`. Quando la funzione restituisce true, TypeScript restringe il parametro a quel tipo.
function isString(val: unknown): val is string {
  return typeof val === 'string';
}

Utilizzo di una type guard

Chiami la type guard in una condizione if. TypeScript restringe il tipo all'interno del blocco.
function process(val: unknown) {
  if (isString(val)) {
    console.log(val.toUpperCase()); // val: string
  }
}

Type guard per le interfacce

Poiché non può utilizzare instanceof con le interfacce, le type guard sono il modo principale per restringere le unioni di interfacce.
interface Cat { meow(): void }
interface Dog { bark(): void }
function isCat(pet: Cat | Dog): pet is Cat {
  return 'meow' in pet;
}

Type guard per oggetti complessi

Scriva una type guard che convalidi a runtime la struttura di un oggetto prima di utilizzarlo come tipo specifico.
interface User { name: string; age: number; }
function isUser(val: unknown): val is User {
  return (
    typeof val === 'object' &&
    val !== null &&
    typeof (val as any).name === 'string' &&
    typeof (val as any).age === 'number'
  );
}

Type guard e asserzioni

Le type guard verificano a runtime. Le asserzioni di tipo (as Type) vengono applicate solo in fase di compilazione e possono essere false. Preferisca le guard per i dati esterni.

Array.isArray come type guard

Array.isArray è una type guard integrata. TypeScript la riconosce e restringe il tipo di conseguenza.
function flatten(val: string | string[]): string[] {
  return Array.isArray(val) ? val : [val];
}

Type guard generiche

Le type guard possono essere generiche, per creare controlli a runtime riutilizzabili.
function isNonNull<T>(val: T | null | undefined): val is T {
  return val !== null && val !== undefined;
}
const values = [1, null, 2, undefined].filter(isNonNull);
// values: number[]

Funzioni di asserzione

Le funzioni di asserzione (che utilizzano asserts) generano un'eccezione se la condizione è falsa e restringono il tipo dopo la chiamata.
function assertIsString(val: unknown): asserts val is string {
  if (typeof val !== 'string') throw new TypeError('Not a string');
}
assertIsString(input);
console.log(input.toUpperCase()); // narrowed to string

La responsabilità delle type guard

TypeScript si fida completamente dei valori restituiti dalle type guard. Se la guard è errata, TypeScript non rileverà la discrepanza in fase di compilazione.

Type guard in filter e find

Passi le type guard direttamente a array.filter per restringere il tipo del risultato.
const mixed: (string | null)[] = ['a', null, 'b'];
const strings = mixed.filter((x): x is string => x !== null);
// strings: string[]

Verifica rapida

Quale annotazione del tipo restituito identifica una funzione come type guard di TypeScript?

Riepilogo

Le type guard definite dall'utente utilizzano tipi restituiti `param is Type` per incapsulare la logica di restringimento. Funzionano con filter/find, consentono di restringere le interfacce e possono essere generiche. Le funzioni di asserzione restringono il tipo senza restituire un valore booleano.

Domande Frequenti

La lezione «Funzioni predicato per i type guard definiti dall'utente» è gratuita?

Sì — il testo completo di «Funzioni predicato per i type guard definiti dall'utente» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso TypeScript Academy, passa a CoddyKit PRO. Il corso TypeScript Academy include 4 lezioni in totale.

Cosa imparerò in «Funzioni predicato per i type guard definiti dall'utente»?

Scriva predicati is per creare type guard personalizzati. Eserciti TypeScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare TypeScript Academy?

Non è richiesta alcuna esperienza precedente. TypeScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Funzioni predicato per i type guard definiti dall'utente»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione TypeScript Academy?

Sì. Ogni lezione TypeScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Restringimento con typeof e truthiness
  2. Restringimento con instanceof e in
  3. Funzioni predicato per i type guard definiti dall'utente
  4. Verifica dell'esaustività con never
← Torna a TypeScript Academy