import { List } from '../util/List'; import { LengthList } from './LengthList'; import { Inc } from '../number/Inc'; import { Dec } from '../number/Dec'; import { Spread } from '../object/Spread'; import { TupleHasIndex } from '../array/TupleHasIndex'; import { NumberToString } from '../cast/NumberToString'; /** * Reverse a numerically indexed type with explicit `length`, e.g. tuple. * Takes an ArrayLike, outputs a list with known length as an object type * with numerical keys. */ export type ReverseList< R extends List, I extends number = 0, J extends number = LengthList, Acc extends List = { length: number } > = { 0: Spread, 1: ReverseList }[TupleHasIndex];