I see, the problem seems that http://usejsdoc.org/tags-type.html is a bit different than https://developers.google.com/closure/compiler/docs/js-for-compiler#types.

According to the Google's JSDocs, functions, booleans, numbers, and strings are non-nullable by default. So if you say `{number}` you can't pass undefined or null, since is the same as `{!number}`. If you want it to to be able to be undefined or null, you need to use `{?number}`.

But it seems that usejsdoc.org, does not use this convention, so `{!number}` is always a number and `{?number}` is number or null. So then what does `{number}` means? The first or the second option? Or should all the types have a `!` or `?` or `=`?