-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path18.ts
24 lines (22 loc) · 1.19 KB
/
18.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
type Count<T extends string[], Toy extends string, ToyCollector extends string[] = []> = T extends [infer InitialToyValue, ...infer Rest extends string[]]
? InitialToyValue extends Toy
? Count<Rest, Toy, [...ToyCollector, Toy]>
: Count<Rest, Toy, ToyCollector>
: ToyCollector['length'];
type ToySack = [
'🎸', '🎧', '👟', '👟', '💻', '🪀', '🧩', '🎮',
'🎨', '🕹️', '📱', '🧩', '🧸', '🎧', '👟', '🚲',
'📚', '⌚', '🎨', '👟', '🎸', '🧸', '👟', '🎸',
'📱', '🎧', '🎮', '🎒', '📱', '🧩', '🧩', '🚲',
'🕹️', '🧵', '📱', '🕹️', '🕰️', '🧢', '🕹️', '👟',
'🧸', '📚', '🧁', '🧩', '🎸', '🎮', '🧁', '📚',
'💻', '⌚', '🛹', '🧁', '🧣', '🪁', '🎸', '🧸',
'🧸', '🧸', '🧩', '🪁', '🏎️', '🏎️', '🧁', '📚',
'🧸', '🕶️', '💻', '⌚', '⌚', '🕶️', '🎧', '🎧',
'🎧', '💻', '👟', '🎸', '💻', '🪐', '📚', '🎨',
'📱', '🎧', '📱', '🎸', '🏎️', '👟', '🚲', '📱',
'🚲', '🎸'
];
type Shoe = Count<ToySack, '👟'>; // returns 8
type Sock = Count<ToySack, '🧦'>; // returns 0
type Books = Count<ToySack, '📚'>; // returns 5