Какие плюсы и минусы написания всего на interface в TypeScript?
Типы и интерфейсы
Писать всё на interface удобно для объектов, но не для всех видов типов.
Плюсы
- Понятные ошибки при расширении — конфликт полей виден сразу.
- Слияние объявлений — можно дополнять типы, в том числе чужие.
- Производительность компилятора — интерфейсы лучше кешируются на больших проектах.
- Единый стиль для объектов, props и публичного API.
Минусы
- Нельзя описать объединения (
'a' | 'b'), кортежи, вычисляемые типы — всё равно понадобитсяtype. - Случайное слияние — два интерфейса с одинаковым именем в глобальной области незаметно объединятся.
- Неявная расширяемость — интерфейс могут дополнить в другом месте, что иногда нежелательно.
- Нет «закрытых» типов — для дискриминированных объединений нужен
type.
interface Cat { kind: 'cat'; meow(): void }
interface Dog { kind: 'dog'; bark(): void }
type Pet = Cat | Dog; // объединение — только через typeКоротко для собеседования
Плюсы — понятные ошибки, слияние и производительность; минус — объединения, кортежи и вычисляемые типы всё равно требуют type, а слияние может быть неожиданным.