type-challenges / type-challenges

Collection of TypeScript type challenges with online judge

Home Page:https://tsch.js.org/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

9989 - Count Element Number To Object

sunupupup opened this issue · comments

type Flatten<T extends any[]> = T extends [infer First, ...infer Rest]
  ? First extends any[]
    ? [...Flatten<First>, ...Flatten<Rest>]
    : [First, ...Flatten<Rest>]
  : [];

type Help<
  T extends any[],
  Obj extends { [k: PropertyKey]: any[] } = { [P in T[number]]: [] }
> = T extends [
  infer First extends PropertyKey,
  ...infer Rest extends PropertyKey[]
]
  ? Help<
      Rest,
      {
        [K in keyof Obj]: K extends First ? [...Obj[K], 1] : Obj[K];
      }
    >
  : Obj;

type CountElementNumberToObject<Arr extends any[]> = {
  [K in keyof Help<Flatten<Arr>>]: Help<Flatten<Arr>>[K]["length"];
};