0Pricing
TypeScript Academy · Lezione

TypeScript 5.3-5.4: nuovo narrowing e NoInfer

Applichi l'utility NoInfer e il nuovo narrowing per switch/case.

TypeScript 5.3-5.4: nuovo narrowing e NoInfer è 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.

Panoramica di TypeScript 5.3

TypeScript 5.3 (novembre 2023) ha introdotto un miglioramento del restringimento dei tipi nelle istruzioni switch/case, il supporto ai tipi importati nei commenti JSDoc e la modalità di risoluzione in import type.

// npm install typescript@5.3

Miglioramento del restringimento nei blocchi switch/case

TS 5.3 ha migliorato il restringimento dei tipi all'interno delle istruzioni switch, soprattutto per le unioni discriminate con più casi.

type Result = { status: "ok"; data: string } | { status: "err"; code: number };

function handle(r: Result) {
  switch (r.status) {
    case "ok":
      console.log(r.data);   // r: { status: "ok"; data: string } — narrowed
      break;
    case "err":
      console.log(r.code);   // r: { status: "err"; code: number } — narrowed
      break;
  }
}

import type nei commenti JSDoc

TS 5.3 ha aggiunto il supporto al tag JSDoc @import per gli importazioni di soli tipi nei file JavaScript.

/** @import { User } from "./types.js" */

/** @param {User} user */
function greet(user) {
  console.log(user.name);
}

resolution-mode in import type

TS 5.3 consente di specificare resolution-mode in import type per controllare se l'importazione viene risolta come CommonJS o ESM.

import type { User } from "some-library" with { "resolution-mode": "require" };

Panoramica di TypeScript 5.4

TypeScript 5.4 (marzo 2024) ha introdotto il tipo utility NoInfer, ha mantenuto il restringimento dei tipi nelle closure e ha aggiunto i tipi per Object.groupBy e Map.groupBy.

// npm install typescript@5.4

Tipo utility NoInfer<T>

NoInfer impedisce a TypeScript di usare un argomento generico come punto di inferenza, forzando l'inferenza del tipo a partire soltanto dagli altri argomenti.

function createStore<T>(initial: T, onChange: (val: NoInfer<T>) => void) {
  // T inferred from initial, not from onChange callback
}

createStore({ count: 0 }, (val) => {
  // val: { count: number } — inferred from initial only
});

Perché NoInfer è importante

Senza NoInfer, TypeScript proverebbe a inferire T da entrambi gli argomenti e potrebbe ampliare il tipo in modo imprevisto.

// Before NoInfer: T may be widened by the callback
function createStore<T>(initial: T, onChange: (val: T) => void) {}
createStore({ count: 0 }, (val: { count: number; extra: string }) => {});
// T widened to include extra — not what we want

Conservazione del restringimento dopo le closure

TS 5.4 conserva il restringimento del tipo nelle closure quando la variabile ristretta non viene riassegnata dopo la closure.

function process(val: string | null) {
  if (!val) return;
  // val: string
  setTimeout(() => {
    console.log(val.toUpperCase()); // TS 5.4: still string — not widened
  }, 100);
}

Tipizzazione di Object.groupBy

TS 5.4 ha aggiunto i tipi per i metodi statici Object.groupBy e Map.groupBy di ES2024.

const users = [
  { name: "Alice", role: "admin" },
  { name: "Bob", role: "user" },
];
const grouped = Object.groupBy(users, (u) => u.role);
// grouped: { [role: string]: { name: string; role: string }[] }

Generazione delle dichiarazioni migliorata

TS 5.4 ha migliorato la generazione dei file di dichiarazione nei casi complessi che coinvolgono tipi mappati e condizionali, riducendo gli errori falsi nei file .d.ts generati.

// Fewer "Type ... is not assignable to type ..." errors
// in generated declaration files from TS 5.4 onward

Riepilogo: TS 5.3-5.4

TS 5.3: miglioramento del restringimento nei blocchi switch/case e supporto JSDoc per @import. TS 5.4: NoInfer per bloccare i punti di inferenza dei tipi indesiderati, conservazione del restringimento nelle closure e tipi per Object.groupBy.

Verifica rapida

Che cosa impedisce NoInfer?

Che cosa ha imparato

TS 5.3 ha migliorato il restringimento nei blocchi switch/case e ha aggiunto i tipi importati nei commenti JSDoc. TS 5.4 ha introdotto NoInfer per controllare i punti di inferenza, ha conservato il restringimento nelle closure e ha aggiunto i tipi Object.groupBy per ES2024.

Domande Frequenti

La lezione «TypeScript 5.3-5.4: nuovo narrowing e NoInfer» è gratuita?

Sì — il testo completo di «TypeScript 5.3-5.4: nuovo narrowing e NoInfer» è 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 «TypeScript 5.3-5.4: nuovo narrowing e NoInfer»?

Applichi l'utility NoInfer e il nuovo narrowing per switch/case. 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 «TypeScript 5.3-5.4: nuovo narrowing e NoInfer»?

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. TypeScript 5.0: decorator standard e parametri di tipo const
  2. TypeScript 5.1-5.2: inferenza migliorata
  3. TypeScript 5.3-5.4: nuovo narrowing e NoInfer
  4. TypeScript 5.5+: dichiarazioni isolate e novità
← Torna a TypeScript Academy