export type Shift = T extends [infer Shifted, ...infer Rest] ? { extracted: Shifted; rest: Rest; } : { extracted: never; rest: []; }; export type Pop = T extends [...infer Rest, infer Poped] ? { extracted: Poped; rest: Rest; } : { extracted: 0; rest: []; }; export type forceConcat = [...T1, ...T2];