什么是规定何时、何地、如何以及为什么在Typescript 中使用尖括号(即<...>
)的一般规则?
虽然我认为我理解这些括号的许多单独用法,但我很难看到它们的一般用法:它们有时似乎在事物之前加上前缀,有时加在事物之后;有时用于泛型,有时用于特定类型;有时它们出现在我可能预期使用冒号语法的地方.
我想对括号的意思、确切的语法、应该使用的时间、应该使用的时间等有一个简明但详尽的/通用的解释.
什么是规定何时、何地、如何以及为什么在Typescript 中使用尖括号(即<...>
)的一般规则?
虽然我认为我理解这些括号的许多单独用法,但我很难看到它们的一般用法:它们有时似乎在事物之前加上前缀,有时加在事物之后;有时用于泛型,有时用于特定类型;有时它们出现在我可能预期使用冒号语法的地方.
我想对括号的意思、确切的语法、应该使用的时间、应该使用的时间等有一个简明但详尽的/通用的解释.
对于这样的问题,我建议读the spec,尤其是语法部分.类似< something >
的语法用于
Type Parameters
< TypeParameterList >
in section 3.6.1用于类、接口、函数等的声明和调用签名
function heat<T>(food: T): T { return food; }
//^^^^^ Type parameter list
class Pizza<T, E extends Cheese> { toppingA: T; toppingB: E }
//^^^^^^^^^^^^^^^^^^^^ Type parameter list
Type Arguments
< TypeArgumentList >
in section 3.6.2用于泛型类型的引用和泛型函数的调用
var pizza: Pizza<Pepperoni, Mozzarella>;
//^^^^^^^^^^^^^^^^^^^^^^ Type argument list
pizza = heat<{ toppingA: Pepperoni, toppingB: Mozzarella}>(ingredients)
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type argument list
Update 2018-07-01:
<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
Type Assertions
定义并用作< Type > UnaryExpression
,其中section 4.16中的UnaryExpression comes from EcmaScript standard
var ingredients = {
toppingA: new Pepperoni,
toppingB: <Mozzarella> fridge.takeSomeCheese()
//^^^^^^^^^^^^ Type assertion
};
JSX expressions (when enabled)
规范中没有记录,但应该遵循the syntax of JSX,这基本上是一个类似
<JSXElementName JSXAttributes(optional)> JSXChildren(optional) </JSXElementName>
或
<JSXElementName JSXAttributes(optional) />