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 表示泛型类型。WSometing
orASomething
也是有效的,但我只是不喜欢它。(例如,Microsoft 的 API 几乎总是TContext或TEntity )。
您可以向我解释为什么在 Typescript 文档中他们放置 <T> 而不是放置更具描述性的内容,例如 <Identity> 。对我来说,没有什么和<T>是一样的。现在每个人都像傻瓜一样使用<T>,还是我错过了什么?
这些都是下面的假设。我既不认识设计 typescript 通用系统的团队,也不认识编写文档的团队。
泛型的根本级别是能够使用任何可能的类型
T
(不要与 typescript 混淆)。含义是接口(由于缺乏更好的词),当我们创建具体类型时,我们用声明的类型替换:any
Array<T>
T
Array<number>
那么对于界面
Array<T>
来说,还有什么比 更有意义呢T
?我不知道。我确实知道它T
必须是一个 Type (数字、字符串等),所以使用它是有意义的,T
因为它是单词Type的第一个字母。我认为如果type或Type被保留或限制(目前在某些情况下具有特殊含义,因此这也是一个糟糕的选择)Array<Type>
,那么会非常令人困惑和/或什至可能无效,因此避免这些是一个不错的选择。其他语言(C-sharp、Java)也选择使用,因此在语言之间切换并能够使用相同的术语是有利的。type
T
这只是一个约定;不同种类的事物具有明显不同的名称格式,因此您可以从其名称的书写格式看出它是哪种事物。例如,在 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 次 |
最近记录: |