DEV Community

Cover image for Advent of Typescript 2023 Day 21 : TIC TAC TOE

Advent of Typescript 2023 Day 21 : TIC TAC TOE

ecyrbe on December 21, 2023

Hello Typescript Wizards, i hope you are having fun with the Advent of Typescript 2023. With Trash we created some awesome challenges for you to so...
Collapse
 
raijinhasarrived profile image
Raijinhasarrived

day 22

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

type IsValid<T extends any[], U extends any[] = []> = T extends [infer Head, ...infer Tail]
  ? Head extends U[number]
    ? false
    : IsValid<Tail, [Head, ...U]>
  : true;

type Validate<T extends any[]> = T extends [infer First, ...infer Rest] 
  ? IsValid<FlattenArray<First>> extends true
    ? Validate<Rest>
    : false
  : true;
Enter fullscreen mode Exit fullscreen mode
Collapse
 
ecyrbe profile image
ecyrbe

There's a post about it here:
dev.to/ecyrbe/advent-of-typescript...