Closure compiler should have a flag to enable non-nullable by default. Switching to non-nullable as a compiler default would break a ton of backwards compatibility, but the existing semantics are screwy and a flag would allow a correction.
As it stands these two statements are equivalent:
/** @type {function(number)} */
/** @type {function(?number)} */
The current system requires a ridiculous amount of ! symbols to counteract this.