Выбор ответа Middle Базовые типы обновлено
Проверка лишних свойств
Вопрос
Какой вызов даст ошибку компиляции?
type Opts = { url: string };
function req(o: Opts) {}
const o = { url: '/a', retry: 3 };
req(o); // A
req({ url: '/a', retry: 3 }); // B
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Только B. Структурная типизация разрешает лишние поля: объект o подходит под Opts, потому что url у него есть (A компилируется).
Варианты ответа
- Никакой: лишние поля в TypeScript разрешены всегда
- Только A
- Только Bправильный ответ
- Оба
Разбор
Структурная типизация разрешает лишние поля: объект o подходит под Opts, потому что url у него есть (A компилируется). Но для свежего объектного литерала, переданного прямо туда, где ожидается тип, TypeScript включает проверку лишних свойств: retry там почти наверняка опечатка или ошибка, поэтому B не компилируется.
«Оба» неверно, потому что для переменной проверка не срабатывает. «Никакой» неверно, потому что для литералов проверка есть.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.