Skip to content

Commit 077e56c

Browse files
committed
#20 - TypeScript
1 parent 5e7718c commit 077e56c

File tree

1 file changed

+125
-0
lines changed

1 file changed

+125
-0
lines changed
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
const readline = require('node:readline')
2+
const { stdin: input, stdout: output } = require('node:process')
3+
4+
const rl = readline.createInterface({ input, output })
5+
6+
7+
interface Products {
8+
id: number
9+
title: string
10+
price: number
11+
description: string
12+
category: Category
13+
images: string[]
14+
}
15+
16+
interface Category {
17+
id: number
18+
name: string
19+
image: string
20+
}
21+
22+
async function getProducts(): Promise<Products[]> {
23+
try {
24+
const response = await fetch('https://api.escuelajs.co/api/v1/products')
25+
26+
if (!response.ok) {
27+
throw new Error(`HTTP error! status: ${response.status}`)
28+
}
29+
30+
const results: Products[] = await response.json()
31+
console.log('Petición exitosa')
32+
return results
33+
} catch (error) {
34+
console.log('Error al obtener productos:', error)
35+
return []
36+
}
37+
}
38+
39+
async function printData() {
40+
const productsInformation = await getProducts()
41+
console.log(productsInformation)
42+
}
43+
44+
45+
/*
46+
* Extra
47+
*/
48+
49+
const baseUrl: string = 'https://pokeapi.co/api/v2/pokemon/'
50+
51+
interface Pokemon {
52+
id: number
53+
name: string
54+
weight: number
55+
height: number
56+
abilities: Ability[]
57+
types: Type[]
58+
stats: Stat[]
59+
sprites: Sprite
60+
}
61+
62+
interface Ability {
63+
ability: NamedAPIResource
64+
is_hidden: boolean
65+
slot: number
66+
}
67+
68+
interface NamedAPIResource {
69+
name: string
70+
url: string
71+
}
72+
73+
interface Type {
74+
slot: number
75+
type: NamedAPIResource
76+
}
77+
78+
interface Stat {
79+
base_stat: number
80+
effort: number
81+
stat: NamedAPIResource
82+
}
83+
84+
interface Sprite {
85+
front_default: string
86+
back_default?: string
87+
}
88+
89+
async function getPokemonInformation(
90+
url: string,
91+
pokemonName: string
92+
): Promise<Pokemon | null> {
93+
try {
94+
const response = await fetch(`${url}${pokemonName}`)
95+
if (!response.ok) {
96+
console.log(`Error en la respuesta de la API: ${response.status}`)
97+
return null
98+
}
99+
const result: Pokemon = await response.json()
100+
console.log('Petición exitosa')
101+
return result
102+
} catch (error) {
103+
console.error('Error al realizar la petición:', error)
104+
return null
105+
}
106+
}
107+
108+
rl.question('Ingresa el nombre de un Pokémon: ', async (pokemonNameAnswer: string) => {
109+
const pokemonInformation = await getPokemonInformation(baseUrl, pokemonNameAnswer.toLowerCase())
110+
111+
if (pokemonInformation) {
112+
console.log(`Información de ${pokemonInformation.name}:`)
113+
console.log(`ID: ${pokemonInformation.id}`)
114+
console.log(`Peso: ${pokemonInformation.weight}`)
115+
console.log(`Altura: ${pokemonInformation.height}`)
116+
console.log('Tipos:')
117+
pokemonInformation.types.forEach((type) => console.log(` - ${type.type.name}`))
118+
console.log('Estadísticas:')
119+
pokemonInformation.stats.forEach((stat) => console.log(` - ${stat.stat.name}: ${stat.base_stat}`))
120+
} else {
121+
console.log('No se encontró información para el Pokémon ingresado.')
122+
}
123+
124+
rl.close()
125+
})

0 commit comments

Comments
 (0)