Обобщённое ограничение (T extends ...) ограничивает, какие типы может иметь параметр обобщения, чтобы вы безопасно использовали определённые свойства или методы на нём. Без ограничения обобщение может быть чем угодно, поэтому вы не можете предполагать наличие каких-либо членов.
longestBad<T>(: T, : T) {
a. > b. ? a : b;
}
longest<T { : }>(: T, : T): T {
a. > b. ? a : b;
}
(, );
([, ], []);
(, );
