Saltar al contenido principal

[Medium] Interface vs Type Alias

1. What are Interface and Type Alias?

Que son Interface y Type Alias?

Interface (Interfaz)

Definicion: Se utiliza para definir la estructura de un objeto, describiendo que propiedades y metodos debe tener.

interface User {
name: string;
age: number;
email?: string; // Propiedad opcional
}

const user: User = {
name: 'John',
age: 30,
};

Type Alias (Alias de tipo)

Definicion: Crea un alias para un tipo, que se puede usar con cualquier tipo, no solo objetos.

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

const user: User = {
name: 'John',
age: 30,
};

2. Interface vs Type Alias: Key Differences

Principales diferencias entre Interface y Type Alias

1. Metodo de extension

Interface: usando extends

interface Animal { name: string; }
interface Dog extends Animal { breed: string; }
const dog: Dog = { name: 'Buddy', breed: 'Golden Retriever' };

Type Alias: usando tipo de interseccion

type Animal = { name: string; };
type Dog = Animal & { breed: string; };
const dog: Dog = { name: 'Buddy', breed: 'Golden Retriever' };

2. Fusion (Declaration Merging)

Interface: soporta fusion

interface User { name: string; }
interface User { age: number; }
// Se fusiona automaticamente en { name: string; age: number; }
const user: User = { name: 'John', age: 30 };

Type Alias: no soporta fusion

type User = { name: string; };
type User = { age: number; }; // ❌ Error: Duplicate identifier 'User'

3. Alcance de aplicacion

Interface: principalmente para estructuras de objetos

interface User { name: string; age: number; }

Type Alias: utilizable con cualquier tipo

type ID = string | number;
type Greet = (name: string) => string;
type Status = 'active' | 'inactive' | 'pending';
type Point = [number, number];
type User = { name: string; age: number; };

4. Propiedades computadas

Interface: no soporta propiedades computadas

interface User { [key: string]: any; }

Type Alias: soporta operaciones de tipo mas complejas

type Keys = 'name' | 'age' | 'email';
type User = { [K in Keys]: string; };

3. When to Use Interface vs Type Alias?

Cuando usar Interface? Cuando usar Type Alias?

Usar Interface cuando

  1. Definir estructuras de objetos (lo mas comun)
  2. Se necesita fusion de declaraciones (ej. extender tipos de paquetes de terceros)
  3. Definir contratos de clase

Usar Type Alias cuando

  1. Definir tipos union o interseccion: type ID = string | number;
  2. Definir tipos de funcion: type EventHandler = (event: Event) => void;
  3. Definir tuplas: type Point = [number, number];
  4. Se necesitan tipos mapeados o condicionales

4. Common Interview Questions

Preguntas frecuentes en entrevistas

Pregunta 1: Diferencias basicas

Explique las diferencias entre las siguientes dos formas de definicion.

interface User { name: string; age: number; }
type User = { name: string; age: number; };
Haga clic para ver la respuesta

Similitudes: Ambos pueden definir estructuras de objetos, se usan de la misma manera, ambos pueden extenderse.

Diferencias:

  1. Fusion de declaraciones: Interface la soporta; Type Alias no.
  2. Alcance: Interface es principalmente para objetos; Type Alias para cualquier tipo.

Recomendacion: Para estructuras de objetos ambos sirven. Para fusion de declaraciones use Interface. Para tipos no-objeto use Type Alias.

Pregunta 2: Metodos de extension

Explique las diferencias entre extends e intersection &.

Haga clic para ver la respuesta
  • Sintaxis: Interface usa extends, Type usa &
  • Resultado: Ambos producen el mismo resultado
  • Legibilidad: extends de Interface es mas intuitivo
  • Flexibilidad: & de Type puede combinar multiples tipos

Pregunta 3: Fusion de declaraciones

interface User { name: string; }
interface User { age: number; }
const user: User = { name: 'John' }; // Falta age?
Haga clic para ver la respuesta

Las dos declaraciones se fusionan automaticamente. Faltara age generando un error. Type Alias no soporta fusion de declaraciones.

Pregunta 4: Implementacion (implements)

Haga clic para ver la respuesta

Ambos pueden usarse con implements. Interface es mas comun para contratos de clase. Type Alias de funciones no puede implementarse.

5. Best Practices

Mejores practicas

Practicas recomendadas

// 1. Para objetos, preferir Interface
interface User { name: string; age: number; }

// 2. Para tipos union, usar Type Alias
type Status = 'active' | 'inactive' | 'pending';

// 3. Para tipos de funcion, usar Type Alias
type EventHandler = (event: Event) => void;

// 4. Para fusion de declaraciones, usar Interface
interface Window { customProperty: string; }

// 5. Para contratos de clase, usar Interface
interface Flyable { fly(): void; }
class Bird implements Flyable { fly(): void {} }

Practicas a evitar

// 1. No mezclar Interface y Type Alias para la misma estructura
// 2. No usar Type Alias para objetos simples (Interface es mas apropiado)
// 3. No usar Interface para tipos no-objeto

6. Interview Summary

Resumen para entrevistas

Referencia rapida

Interface: objetos, Declaration Merging, extends, contratos de clase.

Type Alias: cualquier tipo, sin Declaration Merging, & interseccion, union/funcion/tupla.

Ejemplos de respuestas para entrevistas

Q: Cuales son las diferencias entre Interface y Type Alias?

"Interface y Type Alias pueden usarse para definir estructuras de objetos, pero tienen diferencias clave: 1) Interface soporta fusion de declaraciones; Type Alias no. 2) Interface es para objetos; Type Alias para cualquier tipo. 3) Interface usa extends; Type Alias usa &. 4) Interface es mejor para contratos de clase. Para objetos ambos sirven, para fusion use Interface, para tipos no-objeto use Type Alias."

Q: Cuando usar Interface y cuando Type Alias?

"Use Interface para: estructuras de objetos, fusion de declaraciones, contratos de clase. Use Type Alias para: tipos union/interseccion, tipos de funcion, tuplas, tipos mapeados/condicionales. En resumen, para objetos prefiera Interface, para el resto use Type Alias."

Reference