Сумма T[]
не обязательно должна быть T
в общем случае, рассмотрим, например:
type P = 1|2|3;
let ps: P[] = [1,2,3,1,2,3];
Очевидно, sum(ps)
больше не будет P
.
Я думаю, что ваш пример - это пример использования перегрузок, а не генериков:
function sum(a: number[]): number;
function sum(a: any[]): null;
function sum(values: any[]): any {
if (typeof values[0] === "number")
return values.reduce((prev, curr) => prev + curr, 0);
else
return null;
}
Это компилируется без проблем.
Воспроизвести