typescript - TypeScript 中尖括号的使用规则

标签 typescript

规定何时、何地、如何以及为什么使用尖括号的一般规则是什么,即 <...> , 应该在 TypeScript 中使用?

虽然我认为我理解这些括号的许多单独用途,但我很难看到它们的一般使用模式:它们有时似乎放在事物之前,有时附加在事物之后;有时它们用于泛型,有时用于特定类型;有时它们出现在我可能期望使用冒号语法的地方。

我想对括号的含义、它们的确切语法、何时应该使用它们、何时不应该使用等有一个简洁但详尽/通用的解释。

最佳答案

对于这样的问题,我建议阅读 the spec ,尤其是语法部分。语法类似于 < something >用于

  1. 类型参数

    • 定义为 < TypeParameterList >section 3.6.1
    • 与类、接口(interface)、函数等的声明和调用签名一起使用

      function heat<T>(food: T): T { return food; }
                //^^^^^ Type parameter list
      
      class Pizza<T, E extends Cheese> { toppingA: T; toppingB: E }
               //^^^^^^^^^^^^^^^^^^^^ Type parameter list
      
  2. 类型参数

    • 定义为 < TypeArgumentList >section 3.6.2
    • 与对泛型类型的引用和对泛型函数的调用一起使用

      var pizza: Pizza<Pepperoni, Mozzarella>;
                     //^^^^^^^^^^^^^^^^^^^^^^ Type argument list
      pizza = heat<{ toppingA: Pepperoni, toppingB: Mozzarella}>(ingredients) 
                 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type argument list
      

      2018-07-01 更新: 从 2.9 版开始,泛型类型参数也可以在 JSX elements 中使用和 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
      
  3. 类型断言

  4. JSX 表达式(启用时)

    • 规范中没有记录,但应该遵循 the syntax of JSX , 这基本上是一个类似的表达式

      <JSXElementName JSXAttributes(optional)> JSXChildren(optional) </JSXElementName>
      

      <JSXElementName JSXAttributes(optional) />
      

关于typescript - TypeScript 中尖括号的使用规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37358364/

相关文章:

angular - 空注入(inject)器错误 : No provider for String

typescript - bazel Rules_nodejs 无法使用自定义 package.json 位置解析模块

angular - 在 API 和前端之间共享接口(interface)

javascript - 新运营商

typescript - 如何订阅数组变化?

javascript - 为什么我不能用 Typescript (Javascript) 替换换行符

typescript - 如何从 Vue Composition API/Vue 3.0 + TypeScript 中的组合函数访问根上下文?

typescript - 无法使用 DI 注入(inject)类

angular - 类型 '{Property : string, Property2: string} 不可分配给类型 Observable<Filters[]>

javascript - 如何在 Angular 2 中重用服务调用