Skip to content

Instantly share code, notes, and snippets.

@alexandercerutti
Created December 26, 2023 21:07
Show Gist options
  • Save alexandercerutti/bb4548f50985a04727b78827a5434bef to your computer and use it in GitHub Desktop.
Save alexandercerutti/bb4548f50985a04727b78827a5434bef to your computer and use it in GitHub Desktop.
type BaseList = ["🛹", "🚲", "🛴", "🏄"];
type RepeatAsTuple<
Item extends string,
Times extends number,
Result extends string[] = [],
> = Result["length"] extends Times ? Result : RepeatAsTuple<Item, Times, [...Result, Item]>;
type Rebuild<
AmountsList extends number[],
ItemsList extends string[] = BaseList,
Result extends string[] = [],
> = AmountsList extends [infer Amount extends number, ...infer Rest extends number[]]
? ItemsList["length"] extends 0
? Rebuild<AmountsList, BaseList, Result>
: ItemsList extends [infer Item extends string, ...infer RestOfItemsList extends string[]]
? [...Result, ...Rebuild<Rest, RestOfItemsList, RepeatAsTuple<Item, Amount>>]
: []
: Result;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment