Если вы хотите получить кортежи из литерала массива, есть два способа убедить компилятор сделать это:
Использование кортежей в параметрах rest.Это удалило литерал массива из вызова:
const arrayToArray = <T extends any[]>(...values: T) => values;
const result = arrayToArray(1, 'hi', 3); //[number, string, number]
Использование объединения кортежей и ограничений массива для подсказки компилятору, что вы хотите объединение.Это сохраняет передачу параметра в виде массива:
const arrayToArray = <T extends [any] | any[]>(values: T) => values;
const result = arrayToArray([1, 'hi', 3]); // [number, string, number]
Или, если вы хотите кортеж только для чтения в 3.4 (еще не выпущенный), вы можете напрямую использовать утверждение as const
:
const result = [1, 'hi', 3] as const; // readonly [number, string, number]