Это забавно. Вероятно, в петле есть перерывы, как говорили другие. Я бы сделал это так:
while(true)
{
<main code for function>
break; // at the end.
}
Typescript видит, что первым параметром является number[]
, и это исправляет T
, а затем вы получаете ошибку для второго. В то время как в теории T
можно сделать вывод о string | number
, я бы сказал, что текущее поведение, как правило, хорошо, но более вероятно, что предполагаемые союзы приведут к неожиданным ошибкам в других местах.
Вы можете заставить компилятор принять требуемый вызов, если вы заставите компилятор рассматривать все аргументы как единое целое, а не индивидуально, используя кортежи в параметрах отдыха: тип кортежа для примера вызова ([number[], string[]]
, поэтому для получения типа элемента мы используем T[number][number]
(который будет string | number
для вызова примера), а возврат к массиву массивов с помощью [][]
[ 1112]