strictFunctionTypes: методы и свойства-функции
Вопрос
Включён strictFunctionTypes. Для какого объявления параметр проверяется контравариантно (строго)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Для свойства с типом функции:
handle: (e: MouseEvent) => voidправильный ответ - Для метода:
handle(e: MouseEvent): void - Для обоих вариантов одинаково, разница только в стиле
- Ни для какого:
strictFunctionTypesкасается только колбэков в дженериках
Разбор
Флаг включает контравариантную проверку параметров только для типов функций (свойство с функциональным типом, тип-алиас функции). Методы, объявленные синтаксисом метода, намеренно оставлены бивариантными, иначе сломались бы массивы и DOM-типы (Array<Dog> должен оставаться совместимым с Array<Animal> при методе push). Поэтому вариант «одинаково» неверен, а утверждение про дженерики выдумано. Практический вывод: для строгой проверки обработчиков объявляйте их как свойства.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.