In brief
The ?. operator terminates access at null or undefined. It does not hide arbitrary errors in performance.
Useful to know
Optional chaining allows access to a nested property when an intermediate value may be null or undefined. In these cases, the expression returns undefined, instead of throwing an error at the access itself. [1]
For example, in const user = {name: 'Iva'};, the expression user.address?.city returns undefined, because address is missing. If address is {city: 'Sofia'}, the result is 'Sofia'. This is convenient for optional pieces of data.
The operator does not mean that every operation after it becomes safe. It does not correct an error inside a function that has actually been performed. It doesn't turn the wrong type into the right data model either.
Use it where absence is allowed. If the address is mandatory for delivery, the silent receipt of undefined does not replace validation. Sometimes the correct action is a clear message for a missing field, instead of continuing with an incomplete record.
Sources
For further detail and to check the information: