Good question.

When defining string, boolean, number, and function properties in constructors we always (need to) use `|undefined`. See https://github.com/openlayers/ol3/blob/master/src/ol/interaction/mousewheelzoominteraction.js#L57-61 for an example. You will find many others in the code.

And this is what the [Annotating JavaScript for the Closure Compiler page](https://developers.google.com/closure/compiler/docs/js-for-compiler?hl=fr#types) says: "Functions and all value types (boolean, number, and string) are non-nullable by default whether or not they are declared with the Non-nullable operator. To make a value or function type nullable, use the Nullable operator". But that doesn't mean values of these types can be `undefined`.

We, in ol3, just use `undefined` as the empty value for strings, booleans, numbers, and functions. But we still need an explicit `|undefined` when defining the types of such values.