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.