type Zero = "😰"; type Succ = {prev: N}; type Prev = N extends Succ ? P : never; type Add = B extends Zero ? A : Succ>>; type _Fib = N extends Zero ? AccumulatorA : N extends Succ ? AccumulatorB : _Fib, AccumulatorB, Add>; type Fib = _Fib>; export type {Zero, Succ, Fib};