Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 440новых вакансий за сутки·54 706вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 625
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 397 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 748
  • Облачные технологии6 616
  • QA вакансии2 169
  • Android1 320
  • Инженер данных872
  • Продакт-менеджер302

Разработка

  • iOS1 232
  • Backend вакансии1 204
  • AI вакансии543
  • Fullstack вакансии497
  • Frontend вакансии417
  • Mobile вакансии28

По стеку

  • Go5 212
  • Java3 116
  • Kotlin1 090
  • Node.js995
  • Rust845
  • .NET661
  • PHP320
  • C++271
  • C#208

DevOps и инфраструктура

  • Kubernetes3 913
  • Linux-инфраструктура2 852
  • DevOps вакансии2 678
  • Terraform / IaC2 167
  • Мониторинг и Observability1 066
  • CI/CD923
  • SRE301
  • Кибербезопасность26

Аналитика и данные

  • Аналитик данных533
  • Data Scientist436
  • Бизнес-аналитик400
  • Системный аналитик68

Другие направления

  • Проджект-менеджер90
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США26 186
  • Вакансии в Европе10 369
  • Работа в России3 628
  • Вакансии в Канаде2 306

По формату

  • Удалённые вакансии43 484
  • Релокация в США26 186
  • Гибридная работа5 597
  • Офисная работа4 383

По уровню

  • Senior вакансии22 724
  • Middle вакансии11 726
  • Junior вакансии3 874

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen26 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме TypeScriptВсе вопросы
TypeScriptMiddleТеория

В чём разница между расширением одного interface другим и использованием intersection types?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

extends проверяет совместимость конфликтующих полей на этапе объявления и поддерживает declaration merging; intersection тихо превращает конфликтующие поля в never и подходит для произвольной композиции типов.

Наследование интерфейса через extends

Когда один интерфейс расширяет другой, TypeScript требует, чтобы дочерний интерфейс был совместим с родительским. Одинаковые свойства должны иметь совместимые типы — несовместимое переопределение является ошибкой на этапе объявления:

interface Animal {
  name: string;
  age: number;
}

interface Dog extends Animal {
  breed: string;
  // age: string;  // ошибка: string не совместим с number
}

const d: Dog = { name: "Rex", age: 3, breed: "Husky" };

Intersection types (&)

Intersection создаёт новый тип, объединяющий все свойства нескольких типов. При конфликте типов одного поля результирующее поле получает тип never — без каких-либо ошибок на уровне объявления:

type A = { name: string; age: number };
type B = { name: string; age: string };  // конфликт age

type AB = A & B;
// AB.age имеет тип never (number & string)

const x: AB = {
  name: "test",
  age: 42 as never,  // приходится обходить, что скрывает баг
};

Ключевые различия

  • Проверка совместимости: extends проверяет конфликты сразу, intersection — нет. Конфликтующие поля тихо становятся never.
  • Декларативное слияние: интерфейсы поддерживают declaration merging (два interface Foo в разных файлах сливаются), type-алиасы — нет.
  • Применимость: interface extends работает только с интерфейсами и классами. Intersection работает с любыми типами, включая примитивы и объединения.
  • Читаемость в IDE: extends даёт чистую иерархию, которую легко читать в тултипах. Intersection разворачивается в плоский тип.
  • Производительность компилятора: глубокие цепочки intersection могут замедлять type-checking на больших проектах.

Когда что использовать

// Предпочтительно для ООП-иерархий и публичных API
interface Shape {
  color: string;
}
interface Circle extends Shape {
  radius: number;
}

// Предпочтительно для композиции несвязанных типов
type WithTimestamps = { createdAt: Date; updatedAt: Date };
type WithId = { id: string };

type Entity = WithId & WithTimestamps;

// Миксин-паттерн (только через intersection)
type Serializable = { serialize(): string };
type Loggable = { log(): void };

type Service = Entity & Serializable & Loggable;

Ещё один важный нюанс: методы vs call signatures

// extends: метод ковариантен
interface ReadonlyArray<T> {
  map<U>(fn: (v: T) => U): U[];
}

// intersection с function types: тип вычисляется через overload
type Fn = ((x: string) => string) & ((x: number) => number);
// Fn — перегруженная функция

Подводные камни

  • Конфликт типов поля при intersection даёт never без предупреждения, что обнаруживается только при попытке присвоить значение.
  • Declaration merging интерфейсов может неожиданно сработать в монорепо, если два пакета объявляют одноимённый интерфейс в глобальном пространстве.
  • Intersection глубоко вложенных объектов не делает глубокое слияние — вложенные объекты остаются отдельными типами.
  • extends нельзя применить к union type (interface A extends B | C — ошибка), intersection — можно.
  • При использовании intersection с class в качестве типа теряется возможность проверки instanceof.
  • Сложные intersection замедляют автодополнение в VSCode на файлах с большим числом типов.

Типичные ошибки

  • Смешивать «interface extends и intersection types» с похожим механизмом без критерия выбора.
  • Игнорировать риск: неверно оценить границы применения темы «interface extends и intersection types» и получить хрупкое решение.
  • Показывать только синтаксис и не объяснять поведение в runtime или сборке.

Что проверяет интервьюер

  • Объясняет два способа композиции объектных типов с разным поведением конфликтов.
  • Показывает на примере, как работает: extends явно наследует объектный контракт и понятнее для публичных interface, а intersection пересекает требования и может привести к never при несовместимых свойствах.
  • Называет production-нюанс и граничный случай для темы «interface extends и intersection types».

Как вы знаете этот вопрос?

Проверить себя по теме TypeScript →

Источники

  • https://www.typescriptlang.org/docs/handbook/2/objects.html

Связанные темы

TypeScriptapi-designtype-modeling

Вакансии с этим навыком

TypeScript вакансии
  • Lead Fullstack Engineer (React+Next.js) (#5392)
  • AI Enablement Lead (GenAI Value Lab) (#5686)
  • AI Engineer / Fullstack-разработчик AI-решений
  • Senior Product Engineer
  • Senior Fullstack QA Engineer

Частые вопросы на собеседовании

  • Что такое TypeScript и какие основные преимущества он даёт по сравнению с обычным JavaScript?
  • В чём разница между interface и псевдонимом типа (type) в TypeScript?
  • Что такое generics в TypeScript и зачем они нужны? Приведите пример.
  • Для каких задач TypeScript является сильным выбором, а где лучше честно выбрать другой язык?