Выбор ответа Senior Классы и интерфейсы обновлено

implements не даёт контекстных типов

Вопрос

Какой тип у параметра req в методе?

interface Handler { handle(req: { url: string }): void }
class Home implements Handler {
  handle(req) { console.log(req.url); }
}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Неявный any: implements только проверяет класс, а не типизирует его. Частое заблуждение: implements не переносит типы в класс, он лишь проверяет, что готовый класс совместим с интерфейсом.

Варианты ответа

  1. { url: string }: тип параметра берётся из интерфейса Handler
  2. Неявный any: implements только проверяет класс, а не типизирует егоправильный ответ
  3. unknown: параметр без аннотации в классе получает безопасный тип
  4. never: тип не выведен, и вызов req.url запрещён компилятором

Разбор

Частое заблуждение: implements не переносит типы в класс, он лишь проверяет, что готовый класс совместим с интерфейсом. Параметр без аннотации остаётся неявным any, и в strict-режиме это ошибка компиляции. Поэтому параметры методов аннотируют явно, а для объектных литералов, где контекстная типизация работает, удобнее satisfies Handler.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.