| That sounds like a quirk (I'd argue, a misfeature) of the specific Protobuf implementation you are using. In most implementations, the getter methods for optional fields will return a default value if the field isn't set. If you want to explicitly check for presence, you call a separate "has" method. There are several reasons for this design: * Convenience of avoiding null checks when you know the field is always set. * (Sometimes) Easy backwards-compatibility -- new fields can be declared with a default value that is appropriate when dealing with older senders. * Security: It shouldn't be trivially easy for a malicious client to omit a field that the server is expecting will be there, causing the server to crash or throw an exception. The C++ and Java implementations of Protobuf, at least, have always worked this way. It sounds like the TypeScript implementation you are using does not, unfortunately. (Dislosure: I wrote the C++ and Java implementations of proto2.) |