Labeling a property with ?means that it can be declared or not declared on the object. Giving it a possible type undefinedsays that even if it is declared, it may not matter.
id?: number , , .
id: number | undefined , , , .
id?: number | undefined , , , .
obj = {id: undefined}, id , , obj = {}, id . typeof obj.id === 'undefined' true, id .
, Typescript, , . , , .
, , . , ? undefined, , , , . : typeof obj.id === 'number', (0 == false). (for i in obj) (if('id' in obj)) .