0Pricing
TypeScript Academy · Lezione

Switch completi e controlli con never

Scriva unioni complete con switch e individui i casi mancanti usando never; crei un helper assertNever sicuro.

Switch completi e controlli con never è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 1 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: creare switch esaustivi sulle unioni e usare never per rilevare i casi mancanti in fase di compilazione.

Switch esaustivo

Le unioni discriminate usano un campo comune kind. Uno switch su quel campo restringe ogni caso in modo sicuro.

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

function area(s: Shape): number {
  switch (s.kind) {
    case "circle":
      return Math.PI * s.radius * s.radius
    case "square":
      return s.size * s.size
  }
}

Quando le unioni crescono

Quando viene aggiunto un nuovo membro, ad esempio triangle, lo si rileva con never, così il caso omesso non genera silenziosamente un bug.

type Triangle = { kind: "triangle"; base: number; height: number }
// If we extend Shape but forget to add case, we want a compile-time error
// type Shape = Circle | Square | Triangle

assertNever

Il parametro assertNever deve essere di tipo never, così, se una nuova variante finisce nel default, si verifica un errore di compilazione.

function assertNever(x: never): never {
  throw new Error(`Unhandled case: ${String(x)}`)
}

function areaSafe(s: Shape): number {
  switch (s.kind) {
    case "circle":
      return Math.PI * s.radius * s.radius
    case "square":
      return s.size * s.size
    default:
      return assertNever(s) // if Shape grows, compiler errors here
  }
}

Unioni di valori letterali

Lo stesso pattern si applica alle unioni di stringhe letterali: coprire ogni possibile valore e chiamare assertNever nel caso default.

type Status = "idle" | "loading" | "success" | "error"

function toIcon(s: Status) {
  switch (s) {
    case "idle": return "⏸"
    case "loading": return "⏳"
    case "success": return "✅"
    case "error": return "⚠️"
    default: return assertNever(s)
  }
}

// Alternative: const check
const _check: never = ((): Status => "idle")() as never // force compile-time check with care

Suggerimenti

Suggerimenti: attivare noFallthroughCasesInSwitch; preferire le unioni discriminate; usare default solo per assertNever.

// Tips
// - Enable noFallthroughCasesInSwitch in tsconfig for safer switches
// - Prefer discriminated unions over boolean flags
// - Keep default branch only to call assertNever; avoid swallowing cases

Controllo di assertNever

Controllo rapido: qual è lo scopo di assertNever in uno switch esaustivo?

Riepilogo

Riepilogo: unioni discriminate + switch esaustivo = codice più sicuro. never e assertNever rilevano i casi mancanti in fase di compilazione.

Domande Frequenti

La lezione «Switch completi e controlli con never» è gratuita?

Sì — il testo completo di «Switch completi e controlli con never» è 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 «Switch completi e controlli con never»?

Scriva unioni complete con switch e individui i casi mancanti usando never; crei un helper assertNever sicuro. 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 1 di 3.

Quanto tempo richiede la lezione «Switch completi e controlli con never»?

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. Switch completi e controlli con never
  2. Funzioni predicato e operatore satisfies
  3. Affinare le unioni oltre i confini delle funzioni
← Torna a TypeScript Academy