Skip to content

Commit 64bc99e

Browse files
authored
Merge pull request mouredev#3780 from hozlucas28/Solution-21-TypeScript
#21 - TypeScript
2 parents 020c23a + 24633c8 commit 64bc99e

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/*
2+
Callbacks...
3+
*/
4+
5+
console.log('Callbacks...')
6+
7+
function createArray<T extends number | string>(
8+
length: number,
9+
callback: (prevElement: undefined | T) => T
10+
): T[] {
11+
const array: T[] = []
12+
13+
for (let i = 0; i < length; i++) {
14+
const element: T = callback(array.at(i - 1))
15+
array.push(element)
16+
}
17+
18+
return array
19+
}
20+
21+
const arrayOfEvens: number[] = createArray<number>(10, (prevElement) => {
22+
if (typeof prevElement === 'undefined') return 0
23+
return prevElement + 2
24+
})
25+
26+
console.log(`\nArray of evens: [${arrayOfEvens}]`)
27+
28+
const arrayOfOdds: string[] = createArray<string>(10, (prevElement) => {
29+
if (typeof prevElement === 'undefined') return 'I am the number 1'
30+
31+
const prevElementValue = parseInt(
32+
prevElement.slice(prevElement.lastIndexOf(' '))
33+
)
34+
35+
return `I am the number ${prevElementValue + 2}`
36+
})
37+
38+
console.log(`\nArray of named odds: [${arrayOfOdds}]`)
39+
40+
console.log(
41+
'\n# ---------------------------------------------------------------------------------- #\n'
42+
)
43+
44+
/*
45+
Additional challenge...
46+
*/
47+
48+
console.log('Additional challenge...\n')
49+
50+
interface RestaurantParams<T extends string = string> {
51+
name: T
52+
onConfirm(dishName: T): Promise<void>
53+
onReady(dishName: T): void
54+
onDeliver(dishName: T): Promise<void>
55+
}
56+
57+
async function prepareDish({
58+
name,
59+
onConfirm,
60+
onReady,
61+
onDeliver,
62+
}: RestaurantParams): Promise<void> {
63+
await onConfirm(name)
64+
65+
const randomTimeout: number =
66+
Math.max(Math.ceil(Math.random() * 10), 1) * 1000
67+
68+
await new Promise((resolve) =>
69+
setTimeout(() => {
70+
onReady(name)
71+
resolve(null)
72+
}, randomTimeout)
73+
)
74+
75+
await onDeliver(name)
76+
}
77+
78+
Promise.all([
79+
prepareDish({
80+
name: 'Spaghetti',
81+
async onConfirm(dishName) {
82+
console.log(`${dishName} in preparation.`)
83+
},
84+
onReady(dishName) {
85+
console.log(`${dishName} is ready to deliver.`)
86+
},
87+
async onDeliver(dishName) {
88+
console.log(`${dishName} delivered.`)
89+
},
90+
}),
91+
prepareDish({
92+
name: 'Soup',
93+
async onConfirm(dishName) {
94+
console.log(`${dishName} in preparation.`)
95+
},
96+
onReady(dishName) {
97+
console.log(`${dishName} is ready to deliver.`)
98+
},
99+
async onDeliver(dishName) {
100+
console.log(`${dishName} delivered.`)
101+
},
102+
}),
103+
])

0 commit comments

Comments
 (0)