Most of the times, type aliases in TypeScript are used to alias a more complex type, like a union of other types, to a reusable name. On the other hand, interfaces are used for more traditional object-oriented purposes, where you define the shape of an object and then use that as a contract for function parameters or for a class to implement.
fundamental.ts
type Pet = IDog | ICat;
interface IAnimal {
age: number;
eat(): void;