Выбор ответа Senior tsconfig и декларации обновлено

exactOptionalPropertyTypes

Вопрос

Включён exactOptionalPropertyTypes. Что из этого ошибка?

type Opts = { timeout?: number };

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

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

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

Коротко

Правильный ответ: const c: Opts = { timeout: undefined }. С этим флагом timeout?: number означает «поля может не быть», но если оно есть, то это число.

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

  1. const a: Opts = {} без поля вообще
  2. const b: Opts = { timeout: 100 }
  3. const d: Partial<Opts> = { } для частичного
  4. const c: Opts = { timeout: undefined }правильный ответ

Разбор

С этим флагом timeout?: number означает «поля может не быть», но если оно есть, то это число. Явный undefined уже не подходит: для него нужно timeout?: number | undefined. Разница важна для кода, который проверяет 'timeout' in opts или делает { ...defaults, ...opts } (явный undefined затрёт значение по умолчанию). Пустой объект и число допустимы, Partial тоже.

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

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

Термины по теме