Hola, Juan :)
Yo creo que lo explican bien en este artículo, pero te voy a dejar el resumen.
Consideremos primero que en TypeScript existen tipos de datos básicos, como: Boolean, Number, String, Array, Tuple, Enum, Unknown, Any, Void, Undefined, Null, ..., Object, etc., y sus derivados.
Y tipos de datos avanzados, como los definidos por usuario.
- con
interface defines la forma que tienen los valores de un objeto, por ejemplo, ciertos atributos y sus nombres.
- con
type creas una definición para un tipo de datos, que puede ser un primitivo, o cualquier otro tipo de valor; y le asignas un alias a esa definición.
Las interfaces son poderosas porque puede ser extendida, implementa, o ser el resultado de una fusión (merge), y permiten mantener un control sobre la definición de los objetos.
Usar type es conveniente porque permite controlar los valores que puede tener un tipo (definido por su alias), usando tuplas, union (|), o intersección (&).
Tipos básicos
Tipos avanzados
Interfaces
Typos literales