Это работает, только если вы знаете длину массива:
type a = [1,2,3]
type Invert<T extends [any, any, any]> = [T[2], T[1], T[0]];
type b = Invert<a> // should yield [3,2,1]
Обновление
На самом деле существует решение (найдено здесь при выпуске проекта машинописного текста):
export type Prepend<Tuple extends any[], Addend> =
((_: Addend, ..._1: Tuple) => any) extends ((..._: infer Result) => any) ? Result : never;
export type Reverse<Tuple extends any[], Prefix extends any[] = []> = {
0: Prefix;
1: ((..._: Tuple) => any) extends ((_: infer First, ..._1: infer Next) => any)
? Reverse<Next, Prepend<Prefix, First>>
: never;
}[Tuple extends [any, ...any[]] ? 1 : 0];
type b = Reverse<[1, 2, 3]>; // type b = [3, 2, 1]
Playground Link