Sim*_*bek 7 naming-conventions identifier typescript typescript-generics
我注意到大多数教程/课程/文章使用T, U... 作为泛型类型的名称。究竟为什么,为什么不指定正常的名称呢?
我注意到大多数教程/课程/文章都使用 T,U... 作为泛型类型的名称。究竟为什么,为什么不指定正常的名称呢?
主要是因为它们是平凡且糟糕的例子。
T 正如我在下面提到的,在大多数情况下,最好在某些内容前加上 T 前缀,而不是仅仅说。 Array<T>是真正开放的典范。如果您要说,编写您自己的.Net 字典版本,其中包含键值对,那么您就会明白为什么在下面的接口示例中可以更加明确。
Dictionary<T,U>
// or
Dictionary<TKey, TValue>
Run Code Online (Sandbox Code Playgroud)
摘自我自己对一个非常相似的问题的回答:
'T'将是在运行时而不是编译时声明的类型。该T变量可以是任何未声明的变量(我找不到引用,但我假设可以用于变量名称的任何有效字符集)。类似地,在c#中,如果类型T表示的不是值类型而是更复杂的类型(类)或接口,则可以将其命名/声明为TVehicle或TAnimal帮助表示未来程序员的有效类型(并且可以被视为最佳实践,因为只是T不直观)。我更喜欢,TSomething因为我知道大写 T 表示泛型类型。WSometingorASomething也是有效的,但我只是不喜欢它。(例如,Microsoft 的 API 几乎总是TContext或TEntity )。
您可以向我解释为什么在 Typescript 文档中他们放置 <T> 而不是放置更具描述性的内容,例如 <Identity> 。对我来说,没有什么和<T>是一样的。现在每个人都像傻瓜一样使用<T>,还是我错过了什么?
这些都是下面的假设。我既不认识设计 typescript 通用系统的团队,也不认识编写文档的团队。
泛型的根本级别是能够使用任何可能的类型
T(不要与 typescript 混淆)。含义是接口(由于缺乏更好的词),当我们创建具体类型时,我们用声明的类型替换:anyArray<T>T
Array<number>
那么对于界面
Array<T>来说,还有什么比 更有意义呢T?我不知道。我确实知道它T必须是一个 Type (数字、字符串等),所以使用它是有意义的,T因为它是单词Type的第一个字母。我认为如果type或Type被保留或限制(目前在某些情况下具有特殊含义,因此这也是一个糟糕的选择)Array<Type>,那么会非常令人困惑和/或什至可能无效,因此避免这些是一个不错的选择。其他语言(C-sharp、Java)也选择使用,因此在语言之间切换并能够使用相同的术语是有利的。typeT
这只是一个约定;不同种类的事物具有明显不同的名称格式,因此您可以从其名称的书写格式看出它是哪种事物。例如,在 Java、Javascript 和 Typescript 中,通常使用camelCase变量、方法名称、UpperCamelCase类名称,UPPER_SNAKE_CASE对于常数;通常用于T类型参数。
这样,如果您看到名为 的类型,T您就知道它是类型参数,而如果您看到名为 的类型,Person您就知道它不是。如果你看到person你就知道这不是一种类型。由于类型擦除,能够区分类和类型参数非常有用;类在运行时存在,但类型参数在编译期间从代码中删除。(这在 Java 中比在 Typescript 中更适用,因为在 Java 中仅删除类型参数,而在 Typescript 中接口和类型别名也会被删除。但该约定来自 Java 和类似语言,因此它一直存在。)
最有可能的是,使用的默认字母是T因为它代表“类型”,然后就像在数学中一样,传统上使用连续的字母来表示相同类型事物的多个变量,因此S、T、U、V很常见。此外,K通常用于通用键类型和V与其关联的值类型;在某些情况下,E用于集合中“元素”的类型。
| 归档时间: |
|
| 查看次数: |
4193 次 |
| 最近记录: |