На собеседовании
«Для object shapes они почти взаимозаменяемы — я фокусируюсь на отличиях, которые реально решают выбор. Interface открыт: declaration merging, можно дополнить Window или third-party модуль, плюс более читаемые ошибки по имени типа — беру для публичных и class-facing контрактов. Type alias может назвать что угодно: unions, tuples, function types, вычисляемые mapped/conditional — interface так не выразит, и alias закрыт — это то, что нужно для внутренних определений. Ловушка: interface extends отвергнет несовместимый override, а пересечение через & тихо даст never. Оба полностью стираются — runtime type checking не дают.»
Итог
Open/closed, merging, extends vs &, runtime erasure — compact interview answer.