onTagged(doclet, tag) {
			if ( !tag.value ) {
				error("@template tag must have a value ('" + tag.text + "')");
				return;
			}
			if ( !tag.value.name ) {
				error("@template tag must have a name ('" + tag.text + "')");
				return;
			}
			doclet.typeParameters = doclet.typeParameters || [];
			doclet.typeParameters.push(tag.value);
		}
The 'template' can be used to describe type parameters of generic functions.

- the 'name' part of the tag is mandatory
- the 'type' part defines any type constraints
- a type parameter can have a default value (default type)

Examples:
<pre>
  @template E - Element type, just a name (<E>)
  @template {UI5Element} E - Element type with type constraint (<E extends UI5Element>)
  @template {UI5Element} [E=UI5Control] - Type param with a default type (<E extends UI5Element = UI5Control>)
</pre>

Note: Defining a type constraint implicitly makes the constraint the default value of the param.
Additionally documenting a default type is only necessary when it differs from the constraint.

@see {@link https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#template}