Vai al contenuto principale

[Medium] Interface vs Type Alias

1. Cosa sono interface e type?

Come differiscono interface e type in TypeScript?

Entrambi definiscono tipi, e si sovrappongono per molti casi d'uso relativi alla forma degli oggetti.

interface

interface User {
id: number;
name: string;
email?: string;
}

type

type User = {
id: number;
name: string;
email?: string;
};

Per la modellazione di oggetti di base, entrambi sono validi.

2. Differenze principali (Key differences)

Argomentointerfacetype
Forma dell'oggettoEccellenteEccellente
Alias di primitiviNon supportatoSupportato
Tipo unionNon supportato direttamenteSupportato
Tipo tuplaNon supportato direttamenteSupportato
Fusione delle dichiarazioni (Declaration merging)SupportataNon supportata
Tipi mappati/condizionaliLimitatiDi prima classe

3. Fusione delle dichiarazioni (Declaration merging)

Le dichiarazioni interface con lo stesso nome vengono fuse.

interface Config {
apiBase: string;
}

interface Config {
timeout: number;
}

const cfg: Config = {
apiBase: '/api',
timeout: 5000,
};

type non può essere riaperto con lo stesso nome.

4. Union, tupla e composizione avanzata

Questi sono naturali con type.

type Status = 'idle' | 'loading' | 'success' | 'error';
type Point = [number, number];

type ApiSuccess<T> = { ok: true; data: T };
type ApiFail = { ok: false; message: string };
type ApiResult<T> = ApiSuccess<T> | ApiFail;

5. Estensione e combinazione (Extending and combining)

Interface extends

interface Animal {
name: string;
}

interface Dog extends Animal {
bark(): void;
}

Type intersection

type Animal = { name: string };
type Dog = Animal & { bark(): void };

Entrambi i pattern sono comuni. Scegli quello che si adatta alle convenzioni del tuo team.

6. Tipi di funzione (Function types)

interface Formatter {
(value: string): string;
}

type Parser = (input: string) => number;

Entrambi funzionano bene per le firme delle funzioni.

7. Guida decisionale pratica

Usa interface quando:

  • Modelli principalmente contratti di oggetti
  • Vuoi il comportamento di fusione delle dichiarazioni
  • Definisci contratti di API pubbliche nelle librerie

Usa type quando:

  • Hai bisogno di alias di union/tupla/primitivi
  • Fai affidamento su tipi mappati o condizionali
  • Vuoi comporre logica di tipo avanzata

8. Raccomandazione per la maggior parte dei team

  • Inizia con interface per contratti di oggetti semplici
  • Usa type per union, tuple e programmazione a livello di tipo
  • Mantieni la coerenza in ogni codebase per ridurre il carico cognitivo

9. Risposte rapide per i colloqui (Quick Interview Answers)

D1: Uno è strettamente migliore?

No. Si sovrappongono molto; le differenze emergono in scenari avanzati.

D2: Perché gli autori di librerie potrebbero preferire interface?

La fusione delle dichiarazioni può migliorare l'estensibilità per i consumatori.

D3: Perché il codice delle app potrebbe preferire type?

Il codice delle app usa spesso union e composizione in stile utility.