Interface TypeScript, dalla sintassi a interface vs type

Interface TypeScript

Interface TypeScript: sintassi, extends, merging, vs type | We.Inc

Crea un'interface campo per campo, guarda il type alias corrispondente e impara membri opzionali e readonly, extends, declaration merging e quando un type alias è la scelta migliore.

Un'interface dà un nome alla forma di un oggetto: quali proprietà ha e che tipo contiene ciascuna. Rendi una proprietà opzionale con ? e immutabile con readonly, costruisci su un'altra forma con extends e riapri lo stesso nome per aggiungere altri membri. Le interface non lasciano traccia nel JavaScript compilato; servono solo a guidare il type checker.

La sintassi delle interface in sintesi

Aggiungi campi nel generatore qui sotto, spunta opzionale o readonly e copia l'interface o il type alias equivalente. Le sezioni successive trattano l'estensione, il merging e i pochi casi in cui la scelta tra interface e type conta davvero.

Domande frequenti

Devo usare interface o type?

Per le forme degli oggetti funzionano entrambi e l'handbook lo definisce soprattutto una preferenza personale, suggerendo interface finché non ti serve una funzionalità che ha solo type. Usa type per union, tuple, primitivi e mapped o conditional type; usa interface quando vuoi il declaration merging.

Cos'è il declaration merging?

Dichiarare un'interface con un nome già esistente aggiunge membri a quella esistente invece di dare errore. Le librerie ci contano per permetterti di estendere i loro tipi, per esempio aggiungendo una proprietà a Window. Un type alias con un nome ripetuto è un errore.

Cosa succede se due interface unite danno tipi diversi a una proprietà?

Il compilatore segnala un errore. Con un'intersezione di due tipi il conflitto non viene segnalato nella dichiarazione; la proprietà diventa never, cosa che emerge più tardi ed è più difficile da rintracciare.

Un'interface può descrivere una funzione o un array?

Sì. Una call signature come (value: string): boolean descrive una funzione, e una index signature come [index: number]: string descrive un oggetto simile a un array. Nei casi semplici un type alias come type Check = (v: string) => boolean si legge meglio.

Le interface esistono a runtime?

No. Compilano in niente, quindi non puoi usare instanceof con un'interface né elencarne le chiavi. Controlla i valori con una guardia a runtime e annota il suo tipo di ritorno con l'interface.

extends e intersezioni a confronto

Opzionali, readonly e index signature

Il merging per estendere i tipi globali e delle librerie

interface vs type alias

Cosa può fare ciascuna dichiarazione

Pattern che scriverai spesso

Estendere una e più interface

Admin ottiene ogni membro di User più i propri; Card combina due forme non correlate.

Declaration merging su Window

Inserito in un file .d.ts, permette a window.appVersion di superare il type check ovunque.

Index signature e call signature

Scores accetta qualsiasi chiave stringa; Validator descrive un valore invocabile.

Generatore di interface

Nome dell'interface

Extends (facoltativo)

Nome della proprietà {n}

Tipo della proprietà {n}

Opzionale

Readonly

Rimuovi la proprietà {n}

Aggiungi proprietà

Come interface

Come type alias

Copia l'interface

Copia il type

I nomi devono iniziare con una lettera, $ o _ e usare solo lettere, cifre, $ o _.

Inizia gratis · Nessuna carta di credito richiesta

Correlati: Guide

Prodotto

Per chi è

Funzionalità

Risorse

Azienda

Mappa del sito