x?: string разрешает отсутствие свойства, а x: string|undefined требует само свойство, хотя его значение может быть undefined.
[имя] чем отличаются `x?: string` и `x: string | undefined` в TypeScript? Когда это различие может стать проблемой?
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.