【问题标题】:Why are type variables for generics commonly declared as a single letter (e.g.: <T>)?为什么泛型的类型变量通常声明为单个字母(例如:<T>)?
【发布时间】:2019-03-30 18:55:55
【问题描述】:
对于TypeScript generics documentation 中的每个示例以及我遇到的大多数类型定义文件,类型变量都声明为单个字母,通常是<T>。
例子:
function identity<T>(arg: T): T {
return arg;
}
问题:
- 为什么泛型的类型变量通常声明为单个字母?
- 这样做的原因是什么?
- 除了约定俗成和简洁之外,还有其他目的吗?
- 使用更具描述性的名称有什么优缺点?
【问题讨论】:
标签:
typescript
generics
types
static-typing
typescript-generics
【解决方案1】:
Generics Types 的 Java 文档对此有一个非常好的段落 - 它适用于所有支持类型变量的语言:
类型参数命名约定
按照惯例,类型参数名称是单个大写字母。这与您已经知道的变量命名约定形成鲜明对比,并且有充分的理由:如果没有这种约定,就很难区分类型变量和普通类或接口名称。
最常用的类型参数名称有:
....
T - 类型
基本上,您希望能够快速识别出某物是类型变量,而将类型变量命名为 T 在某些时候只是成为标准代码约定。
Microsoft 在C++ 和C# 上的文档也有这种约定。
【讨论】:
-
C# guidelines 实际上推荐以 T 为前缀的描述性名称,尤其是当类型参数不止一个时;因此List<T> 但Dictionary<TKey, TValue>。