Libraries should prefer interfaces over type aliases.
Other packages should prefer type aliases over interfaces.
Type aliases support unions, primitives, shorthand functions, and advanced type functions.
Interfaces support declaration merging. This is especially important for libraries as it allows consumers to extend type definitions.
Because an ideal property of software is being open to extension, you should always use an interface over a type alias if possible.
-- TypeScript