Это просто соглашение об именах для аргументов типа (он же generics) .
Почему? Аргументы типа - это уникальный вид параметра в коде (он не представляет конкретный тип или значение, скорее это заполнитель для какого-либо типа в этом контексте), поэтому полезно иметь какой-то визуально различимый шаблон именования, длячитабельность кода.
В простых случаях имя T
является часто используемым для аргумента типа:
interface Collection<T> {
[index: number]: T;
}
Если у вас есть несколько аргументов типа, это также обычно используют разные заглавные буквы для каждого аргумента типа:
class Component<P, S> {
// In React `P` represents "Props" type, and `S` represents "State" type
}
Однако, это может быть довольно трудно читать! Хорошо известно, что отдельные буквы, такие как T
и S
, являются своего рода аргументом типа, а не конкретными типами, но представьте себе код, который ссылается на P
, S
, R
, SS
, и вынужно разобраться, что это значит, пока вы читаете код. Это может быть трудно. Поэтому для лучшей читабельности вы можете использовать полное имя (нет синтаксических ограничений на имена аргументов типа):
class Component<Props, State> { }
Это прекрасно работает. Проблема в том, что Props
и State
выглядят так, как будто они могут быть реальными конкретными типами с именами Props
и State
, но это не так. Так что теперь у вас есть другой вид потенциальной путаницы. Итак, наконец, чтобы сохранить читабельность без потери намека на то, что они являются аргументами типа заполнителя, а не конкретными типами, используйте полные имена с префиксом T
(для «аргумента типа»):
class Component<TProps, TState> { }
Единственный нисходящийстороной этого являются более длинные имена, поэтому вы все еще видите T
и такие часто используемые, особенно в тех случаях, когда опытный программист, естественно, будет знать, что это означает, например, Collection<T>
довольно ясно, Collection<TElement>
не является обязательным, и для разработчика React "реквизиты" и "состояние" - это простое использование React, поэтому Component<P, S>
будет хорошо известно. В конце концов, это все равно выбор стиля.
Больше информации, чем вы, возможно, хотели. :)