В чем разница между паттернами в TypeScript и в других языках

«В чем разница между паттернами в TypeScript и в других языках» — вопрос из категории Паттерны, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

TypeScript — это надмножество JavaScript, поэтому его паттерны часто связаны с особенностями JS, такими как прототипное наследование и динамическая типизация. Основные отличия:

  1. Декораторы — уникальная фича TS (хоть и на стадии proposal в JS), часто используется в Angular.
@Component({...})
class MyComponent {}
  1. Интерфейсы vs Классы — в TS интерфейсы существуют только на этапе компиляции, в отличие от Java/C#.

  2. Structural Typing — типы проверяются по структуре, а не по явному наследованию (как в Java).

interface Point { x: number; y: number }
function printPoint(p: Point) {...}
printPoint({ x: 1, y: 2 }); // OK, структура совпадает
  1. Миксины — популярны из-за гибкости JS, реализуются через утиную типизацию.

  2. Utility Types (Partial, Pick и др.) — специфичны для TS, помогают работать с типами динамически.