Si ya conoces los conceptos de Typescript de las Interfaces en Typescript y los Type alias en Typescript, es probable que de primeras te resulten similares, y tienes razón, con el paso del tiempo se han ido añadiendo funcionalidades a los type alias, haciendo que cada vez se parezcan más.

Para empezar los type alias son para nombrar tipos, por lo que puedes nombrar un simple string para darle significado, mientras que las interfaces sirven solo para objetos.

A nivel conceptual las interfaces definen una especie de contratos que deben cumplirse. En las interfaces puedes añadir también métodos que deben implementarse, por lo que habitualmente se utilizan para el Tipado de clases en Typescript.

Las interfaces son abiertas

Una diferencia de las Interfaces en Typescript respecto a los Type alias en Typescript, es que las interfaces son abiertas, eso quiere decir que puedes redeclararlas más abajo en el código, ejemplo:

interface User {
  name: string;
}

function getUserEmail(user: User) {
  return user.email;
}

interface User {
  email: string;
}

En este caso desde la función puedes acceder a la propiedad email de la interfaz de User, aunque se declare más abajo en el código. Typescript lo que hace es coger la interfaz de abajo con el mismo nombre, y "mergearla" con la que tengas declarada arriba.

Los type alias tienen unión e intersección

Otra diferencia con los tipos es que las interfaces NO se puede hacer Unión e intersección de tipos en Typescript.

Esto permite tener tipos mucho más complejos que con las interfaces, que solo permiten ser extendidas.

¿Cuándo usar tipos con nombre y cuándo interfaces?

Como hemos visto antes, las interfaces al ser abiertas son muy útiles a la hora de extender los tipos de una librería o proyecto externo, aunque hay que tener mucho cuidado de no hacerlo de forma involuntaria.

Si necesitas hacer unión e intersección de tipos es mejor usar tipos nombrados, mientras que si quieres usar implements en una clase o quieres que el tipo pueda ser modificable es mejor usar interfaces.

La documentación oficial de Typescript recomienda tirar de primeras con las interfaces, y si ves que necesitas algo de los type alias, entonces ya cambiar.

Con todo, hay que tener en cuenta que habrá muchos casos en los que puedas usar ambas opciones, y la decisión dependerá del proyecto y de sus necesidades.