TypeScript offers two main ways to define types: type and interface.
Type is used to define a custom data structure, supporting unions, intersections, and advanced types.
Interface is specifically designed for defining object shapes, supporting inheritance and declaration merging.
Use type for unions, intersections, aliases, and advanced type constructs. Use interface for defining object or class shapes, inheritance, and extending existing structures.