With questions like this, I’d recommend reading the spec, especially the Grammar section. Syntax like < something >
is used in
-
Type Parameters
- Defined as
< TypeParameterList >
in section 3.6.1 -
Used with declarations and call signatures of classes, interfaces, functions and more
function heat<T>(food: T): T { return food; } //^^^^^ Type parameter list class Pizza<T, E extends Cheese> { toppingA: T; toppingB: E } //^^^^^^^^^^^^^^^^^^^^ Type parameter list
- Defined as
-
Type Arguments
- Defined as
< TypeArgumentList >
in section 3.6.2 -
Used with references to generic types and calls to generic functions
var pizza: Pizza<Pepperoni, Mozzarella>; //^^^^^^^^^^^^^^^^^^^^^^ Type argument list pizza = heat<{ toppingA: Pepperoni, toppingB: Mozzarella}>(ingredients) //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type argument list
Update 2018-07-01:
As of version 2.9, generic type arguments can also be used in JSX elements and tagged templates.<MenuItem<Pizza> toppings={[Pepperoni, Mozzarella]} /> //^^^^^^^ Type argument list const ratingHtml = escapeUserInput<string | number> `Customer ${feedback.customer.username} rated this pizza with <b>${feedback.rating}</b>/10!` //^^^^^^^^^^^^^^^^ Type argument list
- Defined as
-
Type Assertions
-
Defined and used as
< Type > UnaryExpression
where UnaryExpression comes from EcmaScript standard in section 4.16var ingredients = { toppingA: new Pepperoni, toppingB: <Mozzarella> fridge.takeSomeCheese() //^^^^^^^^^^^^ Type assertion };
-
-
JSX expressions (when enabled)
-
Not documented in the spec, but should follow the the syntax of JSX, which is basically an expression like
<JSXElementName JSXAttributes(optional)> JSXChildren(optional) </JSXElementName>
or
<JSXElementName JSXAttributes(optional) />
-