Тип может быть не «любая строка», а конкретный набор разрешённых значений — это литеральные типы:
let direction: "left" | "right" | "up" | "down"; direction = "left"; // ок direction = "top"; // ошибка — нет такого варианта
Это удобно для статусов, режимов, ролей: редактор подскажет допустимые значения и не даст опечататься.
Чтобы не повторять длинные объединения, им дают имя через ключевое слово type:
type Direction = "left" | "right" | "up" | "down"; type Id = number | string;
function move(dir: Direction) { /* ... */ }
Теперь тип переиспользуется по имени. type-псевдоним можно создать для чего угодно: объединения, объекта, функции — это базовый инструмент организации типов в проекте.