Antes de meternos al barro con la explicación, creo que es importante tener primero los conceptos, por eso mismo vamos a ver
Ejemplo:
interface Animal {
name: string;
age: number;
}
// Esto es correcto
const dog: Animal = {
name: "Rex",
age: 5
};
// Esto es incorrecto (falta la propiedad `age`)
const cat: Animal = {
name: "Whiskers"
};
type
es una forma flexible de definir un alias para cualquier tipo de dato, como un objeto, una unión de tipos, una función, etc. Es como ponerle un nombre a cualquier tipo que puedas imaginar.type
cuando necesites algo más que solo un "molde" de objeto. Por ejemplo, si necesitas definir un tipo que puede ser varias cosas (unión de tipos) o combinar varios tipos (intersección de tipos).Ejemplo:
type StringOrNumber = string | number;
// Correcto: es un string
let a: StringOrNumber = "hello";
// Correcto: es un número
let b: StringOrNumber = 42;
// Incorrecto: no es ni string ni número
let c: StringOrNumber = true;
Imagina que tienes que hacer una receta y definir los ingredientes:
Ahora que hemos hecho un repaso en los conceptos
En TypeScript, tanto interface
como type
se utilizan para definir la forma o estructura de los objetos, pero tienen algunas diferencias clave. Aquí te dejo un resumen con ejemplos para que lo veas más claro.
interface
: Se usa para describir la forma de un objeto. Es más comúnmente utilizada cuando quieres definir un contrato que una clase u objeto debe seguir.type
: Es más flexible, se puede usar para describir tipos complejos como uniones, intersecciones, y otros.interface User {
name: string;
age: number;
}
type User = {
name: string;
age: number;
};
interface
: Soporta la herencia múltiple. Puedes extender varias interfaces, lo cual es útil para construir estructuras complejas.type
: También puede extender otros tipos usando intersección (&
), pero no tiene soporte para la herencia múltiple explícita como las interfaces.interface Person {
name: string;
}
interface Employee extends Person {
employeeId: number;
}
type Person = {
name: string;
};
type Employee = Person & {
employeeId: number;
};
type
: Permite crear uniones e intersecciones de tipos, lo que te da más flexibilidad a la hora de definir tipos complejos.interface
: No tiene esta capacidad, pero puedes lograr algo similar usando herencia.// Unión
type Status = "active" | "inactive";
// Intersección
type Admin = User & {
role: "admin";
};
interface
: Permite "merging" automático. Si defines la misma interfaz en varios lugares, TypeScript las combinará automáticamente en una sola.type
: No permite merging. Si defines el mismo type
dos veces, obtendrás un error.interface User {
name: string;
}
interface User {
age: number;
}
// Resultado: la interfaz User ahora tiene ambas propiedades, name y age.
type
: Es más adecuado para definir alias de tipos complejos, como tuplas, uniones, y funciones.type StringOrNumber = string | number;
type Callback = (input: string) => void;
interface
es mejor para definir contratos para objetos y clases, y cuando necesitas usar herencia o merging.type
es más flexible y se recomienda para tipos complejos, uniones, intersecciones y alias de tipos.I am particularly drawn to developing applications that are not only functional but also visually appealing and easy to use. I accomplish this by implementing SOLID principles and clean architecture, and applying testing to ensure quality.