In reply to ABD_91:
The type of a parameter with no explicit datatype in its declaration gets the type of whatever the RHS default value is, or whatever the type of its final overwritten value. The numeric literal 100 is defined to have an integer type, which is a 32-bit signed 4-state type.
Once you declare a parameter with an explicit datatype, any override must be assignment compatible with declared type, and the parameter keeps its explicitly declared type.
$typename is not very well defined, so I suspect it does not get used that often, and has a number of tool specific issues.