Выбор ответа Senior tsconfig и декларации обновлено
exactOptionalPropertyTypes
Вопрос
Включён exactOptionalPropertyTypes. Что из этого ошибка?
type Opts = { timeout?: number };
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: const c: Opts = { timeout: undefined }. С этим флагом timeout?: number означает «поля может не быть», но если оно есть, то это число.
Варианты ответа
const a: Opts = {}без поля вообщеconst b: Opts = { timeout: 100 }const d: Partial<Opts> = { }для частичногоconst c: Opts = { timeout: undefined }правильный ответ
Разбор
С этим флагом timeout?: number означает «поля может не быть», но если оно есть, то это число. Явный undefined уже не подходит: для него нужно timeout?: number | undefined. Разница важна для кода, который проверяет 'timeout' in opts или делает { ...defaults, ...opts } (явный undefined затрёт значение по умолчанию). Пустой объект и число допустимы, Partial тоже.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
erasableSyntaxOnly и type stripping в Node
Следующий вопрос
Поле exports и типы библиотеки