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

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

我想对括号的意思、确切的语法、应该使用的时间、应该使用的时间等有一个简明但详尽的/通用的解释.

推荐答案

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

  1. Type Parameters

    • Defined as < 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
      
  2. Type Arguments

    • Defined as < 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
      
  3. Type Assertions

  4. JSX expressions (when enabled)

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

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

      <JSXElementName JSXAttributes(optional) />
      

Typescript相关问答推荐

Typescript:假设foo不在类型栏中,而它在:如何调试

在角形加载组件之前无法获取最新令牌

当类型断言函数返回假时,TypScript正在推断从不类型

为什么缩小封闭内部不适用于属性对象,但适用于声明的变量?

即使子网是公共的,AWS CDK EventBridge ECS任务也无法分配公共IP地址

HttpClient中的文本响应类型选项使用什么编码?''

如何在typescript中设置对象分配时的键类型和值类型

TypeScrip省略了类型参数,仅当传递另一个前面的类型参数时才采用默认类型

Cypress页面对象模型模式.扩展Elements属性

部分更新类型的类型相等

尽管对象的类型已声明,但未解析的变量<;变量

TypeScrip:从对象中提取和处理特定类型的键

将带有样式的Reaction组件导入到Pages文件夹时不起作用

缩小对象具有某一类型的任意字段的范围

VITEST警告:当前的测试运行器不支持After Each/teardown挂钩

如何从上传文件中删除预览文件图标?

如何在本地存储中声明该类型?

对于VUE3,错误XX不存在于从不存在的类型上意味着什么?

TypeScrip:从嵌套的对象值创建新类型

如何使用动态生成的键和值定义对象的形状?