[имя] чем отличаются `x?: string` и `x: string | undefined` в TypeScript? Когда это различие может стать проблемой?

x?: string разрешает отсутствие свойства, а x: string|undefined требует само свойство, хотя его значение может быть undefined.

Короткий ответ

Что ответить на собеседовании

x?: string разрешает отсутствие свойства, а x: string|undefined требует само свойство, хотя его значение может быть undefined.

Подробный разбор

Ответ с пояснениями

x?: string разрешает отсутствие свойства, а x: string|undefined требует само свойство, хотя его значение может быть undefined.

Различие важно для in, Object.keys, spread и частичных обновлений. При exactOptionalPropertyTypes=true запись {x: undefined} не подходит к x?: string, если undefined не включён явно. При чтении необязательного свойства всё равно нужно учитывать undefined. Наличие ключа и его значение — разные вещи.

Источник: www.typescriptlang.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее