Interfaces en TypeScript: de la sintaxis a interface vs type

Interfaces en TypeScript

Interface en TypeScript: sintaxis, extends, fusión y type | We.Inc

Crea una interface campo a campo, mira el type alias equivalente y aprende miembros opcionales y readonly, extends, fusión de declaraciones y cuándo encaja mejor un type alias.

Una interface da nombre a la forma de un objeto: qué propiedades tiene y de qué tipo es cada una. Marca una propiedad como opcional con ? e inmutable con readonly, parte de otra forma con extends y vuelve a abrir el mismo nombre para fusionar más miembros. Las interfaces no dejan rastro en el JavaScript compilado; solo guían al comprobador de tipos.

La sintaxis de interface de un vistazo

Añade campos en el generador de abajo, marca opcional o readonly y copia la interface o el type alias equivalente. Las secciones de debajo cubren extends, la fusión y los pocos casos en los que elegir entre interface y type importa de verdad.

Preguntas frecuentes

¿Debo usar interface o type?

Para formas de objetos funcionan las dos y el handbook dice que es sobre todo cuestión de preferencia, y sugiere interface hasta que necesites algo que solo tiene type. Usa type para uniones, tuplas, primitivos y mapped o conditional types; usa interface cuando quieras fusión de declaraciones.

¿Qué es la fusión de declaraciones?

Declarar una interface con un nombre que ya existe le añade miembros en lugar de fallar. Las librerías se apoyan en esto para que puedas ampliar sus tipos, por ejemplo añadiendo una propiedad a Window. Un type alias con un nombre repetido es un error.

¿Qué pasa si dos interfaces fusionadas dan tipos distintos a una propiedad?

El compilador muestra un error. Con una intersección de dos tipos el conflicto no se señala en la declaración; la propiedad pasa a ser never, lo que aparece más tarde y cuesta más de rastrear.

¿Puede una interface describir una función o un array?

Sí. Una call signature como (value: string): boolean describe una función, y una index signature como [index: number]: string describe un objeto parecido a un array. Para casos simples, un type alias como type Check = (v: string) => boolean se lee con más claridad.

¿Existen las interfaces en tiempo de ejecución?

No. Se compilan a nada, así que no puedes usar instanceof con una interface ni listar sus claves. Comprueba los valores con un guard en tiempo de ejecución y anota su tipo de retorno con la interface.

extends frente a intersecciones

Opcionales, readonly e index signatures

Fusionar para ampliar tipos globales y de librerías

interface frente a type alias

Qué puede hacer cada declaración

Patrones que escribirás a menudo

Extender una y varias interfaces

Admin recibe todos los miembros de User más los suyos; Card combina dos formas sin relación.

Fusión de declaraciones sobre Window

Colocado en un archivo .d.ts, esto hace que window.appVersion pase la comprobación de tipos en todas partes.

Index signature y call signature

Scores acepta cualquier clave string; Validator describe un valor invocable.

Generador de interfaces

Nombre de la interface

Extends (opcional)

Nombre de la propiedad {n}

Tipo de la propiedad {n}

Opcional

Readonly

Quitar la propiedad {n}

Añadir propiedad

Como interface

Como type alias

Copiar interface

Copiar type

Los nombres deben empezar por una letra, $ o _ y usar solo letras, dígitos, $ o _.

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio