0Pricing
TypeScript Academy · Lezione

Funzioni di asserzione e guardie di tipo definite dall’utente

Scriva funzioni di asserzione (asserts x is T) e guardie di tipo definite dall’utente (x is T) per restringere in sicurezza valori unknown o unione.

Funzioni di asserzione e guardie di tipo definite dall’utente è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 3 di 3. 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 3 lezioni in totale.

Introduzione

Obiettivo: trasformare i controlli a runtime in raffinamenti dei tipi con le funzioni di asserzione e i type guard definiti dall'utente per creare API sicure.

Funzione di asserzione

Una funzione di asserzione restringe i tipi per il codice successivo se restituisce il controllo; in caso contrario deve lanciare un'eccezione.

function assertIsString(x: unknown): asserts x is string {
  if (typeof x !== "string") {
    throw new Error("Expected string");
  }
}

let v: unknown = Math.random() > 0.5 ? "ok" : 42;
assertIsString(v); // after this, v is string
console.log(v.toUpperCase());

Funzione type guard

Un type guard restituisce x is T e consente un narrowing intelligente nei rami condizionali e negli helper.

type Circle = { kind: "circle"; radius: number };
type Square = { kind: "square"; size: number };

type Shape = Circle | Square;

function isCircle(s: Shape): s is Circle {
  return s.kind === "circle";
}

function area(s: Shape): number {
  if (isCircle(s)) {
    return Math.PI * s.radius ** 2; // s is Circle here
  }
  return s.size * s.size; // s is Square here
}

console.log(area({ kind: "circle", radius: 2 }));

Type guard nei filtri

I type guard possono fungere da predicati per i metodi degli array (ad esempio filter), così da restringere in modo ordinato i tipi degli elementi.

type Item = { id: number } | null | undefined;

function isPresent<T>(x: T | null | undefined): x is T {
  return x != null;
}

const items: Item[] = [{ id: 1 }, null, undefined, { id: 2 }];
const present = items.filter(isPresent);
// present has type { id: number }[]
console.log(present.map(i => i.id));

Asserire sui dati a runtime

Combini il parsing con un'asserzione per interrompere subito l'esecuzione quando un valore non è del tipo previsto.

function parseJson(s: string): unknown {
  return JSON.parse(s);
}

try {
  const data = parseJson("{\"name\":\"Ada\"}");
  assertIsString(data); // will throw, because data is object
} catch (e) {
  console.log("Handled:", e instanceof Error ? e.message : e);
}

Linee guida

Linee guida:

  • Le asserzioni devono lanciare un'eccezione in caso di errore.
  • Preferisca i guard (x is T) per la logica condizionale.
  • Utilizzi le asserzioni ai confini delle API (I/O, JSON, DOM).

Verifica delle funzioni di asserzione

Verifica rapida: che cosa garantisce una funzione di asserzione con asserts x is string?

Riepilogo

Riepilogo: utilizzi le funzioni di asserzione per imporre i tipi dopo i controlli e i type guard definiti dall'utente per restringere rami e raccolte.

Domande Frequenti

La lezione «Funzioni di asserzione e guardie di tipo definite dall’utente» è gratuita?

Sì — il testo completo di «Funzioni di asserzione e guardie di tipo definite 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 3 lezioni in totale.

Cosa imparerò in «Funzioni di asserzione e guardie di tipo definite dall’utente»?

Scriva funzioni di asserzione (asserts x is T) e guardie di tipo definite dall’utente (x is T) per restringere in sicurezza valori unknown o unione. 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 3.

Quanto tempo richiede la lezione «Funzioni di asserzione e guardie di tipo definite 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. Overload delle funzioni e firme di chiamata
  2. Tipizzazione del parametro this; void e never
  3. Funzioni di asserzione e guardie di tipo definite dall’utente
← Torna a TypeScript Academy