Выбор ответа Senior Классы и интерфейсы обновлено
implements не даёт контекстных типов
Вопрос
Какой тип у параметра req в методе?
interface Handler { handle(req: { url: string }): void }
class Home implements Handler {
handle(req) { console.log(req.url); }
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Неявный any: implements только проверяет класс, а не типизирует его. Частое заблуждение: implements не переносит типы в класс, он лишь проверяет, что готовый класс совместим с интерфейсом.
Варианты ответа
{ url: string }: тип параметра берётся из интерфейсаHandler- Неявный
any:implementsтолько проверяет класс, а не типизирует егоправильный ответ unknown: параметр без аннотации в классе получает безопасный типnever: тип не выведен, и вызовreq.urlзапрещён компилятором
Разбор
Частое заблуждение: implements не переносит типы в класс, он лишь проверяет, что готовый класс совместим с интерфейсом. Параметр без аннотации остаётся неявным any, и в strict-режиме это ошибка компиляции. Поэтому параметры методов аннотируют явно, а для объектных литералов, где контекстная типизация работает, удобнее satisfies Handler.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.