advanced
Structural typing и OOP
Объясняйте, почему TypeScript compatibility основана на shape, а не declared inheritance, и как это влияет на class-based design.
TypeScript использует structural typing: совместимость по форме, не по declared inheritance. Экземпляр класса подходит под interface, если есть нужные члены — `implements` в runtime не обязателен. Иначе, чем nominal языки вроде Java.
Влияние на дизайн: duck typing даёт гибкие adapters, но случайную совместимость при совпадении форм.
На интервью: два несвязанных класса под один interface и когда помогают branded types.
Типовые ошибки: `implements` как runtime check; excess property на object literals; иерархии, которые TS считает слишком совместимыми.
Компромисс — гибкость против ошибок типов только на compile-time при совпадении форм.
Чеклист:
- Assignability по форме.
- Branded types для критичных ID.
- Осознанное разделение DTO и domain types.