type Entry<T> = T extends readonly [unknown, ...unknown[]] ? TupleEntry<T, [], never> : T extends readonly (infer U)[] ? [`${number}`, U] : ObjectEntry<T>
if T extends readonly[] => [number, T], if T extends {} => [key:string, T]
if T extends readonly[] => [number, T], if T extends {} => [key:string, T]