By default TypeScript treats { a?: string } as allowing a to be absent or to be present with the value undefined. exactOptionalPropertyTypes, available since TypeScript 4.4, separates the two: assigning { a: undefined } to that type becomes an error unless the type is written { a?: string | undefined }.
It matters wherever the difference is observable at runtime. Object.keys counts an explicitly-undefined key, in returns true for it, JSON.stringify drops it, and spread-based partial updates that pass undefined will overwrite a stored value rather than leave it alone. Database update helpers and React prop spreading are where this causes real bugs.
It is not enabled by strict, so it has to be added by hand. Enabling it on an existing codebase produces error TS2412 at every site that passes undefined into an optional field. The usual fixes are to omit the key conditionally when building the object, or to widen the declared type to include undefined where callers legitimately pass it.