TypeScript: Obtención Genérica de Datos

Conoce un fetch genérico y type safe en TypeScript: manejo de errores personalizado, parámetros de consulta seguros y ejemplos prácticos para integrar APIs seguras.

16 sept 2025 • 3 min de lectura • Equip Q2BSTUDIO

Inteligencia-Artificial-

Introducción: En Q2BSTUDIO ofrecemos soluciones de software a medida y aplicamos buenas prácticas de desarrollo para crear utilidades reutilizables como un fetch genérico y type safe en TypeScript. A continuación se presenta una implementación completa que maneja tipos genéricos, errores HTTP personalizados y parámetros de consulta de forma segura. Si buscas servicios para crear aplicaciones a medida o integrar inteligencia artificial en tus procesos, este enfoque encaja con arquitecturas modernas y seguras.

Codigo TypeScript completo y explicado:

interface ApiError { message: string; status?: number; } interface ApiResponse<T> { data?: T; error?: ApiError; } enum HttpMethod { GET, POST, PUT, DELETE } interface FetchConfig { method?: HttpMethod; headers?: Record<string,string>; queryParams?: Record<string,string|number>; body?: unknown; } async function fetchData<T>(url: string, config: FetchConfig = {}): Promise<ApiResponse<T>> { try { let finalUrl = url; if (config.queryParams) { const params = new URLSearchParams(); for (const [key, value] of Object.entries(config.queryParams)) { params.append(key, value.toString()); } finalUrl = finalUrl + String.fromCharCode(63) + params.toString(); } const response = await fetch(finalUrl, { method: HttpMethod[config.method ?? HttpMethod.GET] as unknown as string, headers: config.headers, body: config.body as any }); if (!response.ok) { return { error: { message: response.statusText, status: response.status } }; } const data = await response.json() as T; return { data }; } catch (error) { return { error: { message: error instanceof Error ? error.message : String.fromCharCode(85,110,107,110,111,119,110,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100) } }; } }

Explicación del código: Definimos ApiError para estructurar errores con un mensaje y código opcional. ApiResponse<T> es genérica y devuelve o bien data de tipo T o bien un error de tipo ApiError. HttpMethod es un enum numérico para evitar literales de cadena en el código. FetchConfig permite headers, parámetros de consulta y body cuando sea necesario. La función fetchData<T> construye la URL con URLSearchParams si hay queryParams, ejecuta fetch y maneja estados HTTP no OK devolviendo un ApiError. En el bloque catch capturamos errores de red o parseo y devolvemos un ApiError con un mensaje recuperado o generado mediante String.fromCharCode para evitar literales directos.

Constantes de ejemplo para endpoints y cadenas generadas sin literales directos:

const USERS_URL = String.fromCharCode(104,116,116,112,115,58,47,47,97,112,105,46,101,120,97,109,112,108,101,46,99,111,109,47,117,115,101,114,115) const PRODUCTS_URL = String.fromCharCode(104,116,116,112,115,58,47,47,97,112,105,46,101,120,97,109,112,108,101,46,99,111,109,47,112,114,111,100,117,99,116,115) const CATEGORY_ELECTRONICS = String.fromCharCode(101,108,101,99,116,114,111,110,105,99,115) const BEARER_TOKEN_SAMPLE = String.fromCharCode(66,101,97,114,101,114,32,116,111,107,101,110,49,50,51)

Ejemplo de uso con User y Product:

interface User { id: number; name: string; email: string; } interface Product { id: number; name: string; price: number; } async function main() { const userResponse = await fetchData<User[]>(USERS_URL, { queryParams: { limit: 10, page: 1 }, headers: { Authorization: BEARER_TOKEN_SAMPLE } }); if (userResponse.data) { console.log('Usuarios obtenidos', userResponse.data); } else { console.error('Error al obtener usuarios', userResponse.error); } const productResponse = await fetchData<Product[]>(PRODUCTS_URL, { queryParams: { category: CATEGORY_ELECTRONICS } }); if (productResponse.data) { console.log('Productos obtenidos', productResponse.data); } else { console.error('Error al obtener productos', productResponse.error); } } main();

Por qué esto asegura type safety: Generics: Al usar fetchData<T> el consumidor especifica el tipo esperado, por ejemplo User[] o Product[], y TypeScript fuerza que cualquier uso posterior respete ese tipo. Estructura de respuesta: ApiResponse<T> obliga a tratar ambos casos data y error, evitando acceder a datos sin comprobar errores. Manejo de errores: Los errores HTTP se normalizan en ApiError con status y mensaje; errores de red o parseo se capturan en el bloque catch. Parámetros de consulta: queryParams es Record<string,string|number> y se serializa mediante URLSearchParams garantizando que los valores se conviertan a cadena de forma segura. Extensiones: Se puede añadir body tipado con genéricos condicionados para POST y PUT, o utilidades como isSuccessResponse<T> para refinar tipos en tiempo de ejecución.

Conclusión: Esta implementación proporciona un fetch genérico y type safe que facilita la integración con APIs y reduce la posibilidad de errores en tiempo de ejecución. En Q2BSTUDIO podemos adaptar este patrón a tus sistemas, integrarlo con servicios cloud o potenciarlo con soluciones de inteligencia de negocio y power bi para visualización avanzada, o bien integrarlo en arquitecturas seguras y escalables de servicios cloud aws y azure. Si necesitas una implementación a medida o consultoría para desplegar agentes IA, ciberseguridad o automatización, estamos listos para ayudarte.

UNA PAUSA?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Intel·ligència artificial

Agents d'IA, chatbots i assistents intel·ligents que automatitzen tasques i atenen els teus clients 24/7 per millorar l'eficiència del teu negoci.

Més info

Desenvolupament de programari

Aplicacions web, mòbils i d'escriptori, intranets, e-commerce, SaaS i plataformes de gestió dissenyades per a les necessitats concretes de la teva empresa.

Més info

Serveis cloud

Migració, infraestructura, hosting gestionat, alta disponibilitat i seguretat en Microsoft Azure i Amazon Web Services perquè el teu negoci escali sense límits.

Més info

Ciberseguretat i pentesting

Auditories de seguretat, test d'intrusió (pentesting) i protecció d'aplicacions, dades i infraestructura on-premise i cloud, amb hacking ètic i compliment normatiu.

Més info

Business Intelligence

Quadres de comandament i anàlisi de dades amb Power BI: integrem les teves fonts, dissenyem dashboards i KPIs i convertim les teves dades en decisions.

Més info

Automatització de processos

Automatitzem tasques repetitives i connectem les teves aplicacions amb n8n, Power Automate, Make i RPA, eliminant treball manual i augmentant la productivitat.

Més info

Formació per a empreses

Formem els teus equips en tecnologia amb criteri: desenvolupament web, bases de dades, Git, bones pràctiques i seguretat, automatització amb n8n, intel·ligència artificial per a empreses i creació de solucions d'IA amb Azure AI Foundry.

Més info

Auditoria de codi

Auditem el codi que creguis tu, el teu equip o una IA: et diem què està bé i què millorar, el securitzem i el deixem llest per a producció, web o app.

Més info

Generació d'imatges amb IA

Creem per tu les imatges que necessita el teu negoci amb intel·ligència artificial: producte, xarxes, publicitat, il·lustració i avatars. Tu ens dius què vols i t'ho lliurem llest per fer servir.

Més info

Generació de vídeos amb IA

Creem per tu vídeos amb intel·ligència artificial: promocionals, per a xarxes, presentadors virtuals, doblatge i animacions. Ens comptes la idea i t'ho lliurem muntat i llest per publicar.

Més info

Avatars conversacionals amb IA

Creem avatars conversacionals amb IA —humans digitals amb cara i veu— que atenen els teus clients i equips amb el coneixement de la teva empresa, a la teva web, monitors interactius, WhatsApp o Teams.

Més info

Màrqueting Online i IA

Google Ads, Meta Ads, LinkedIn Ads i posicionament en motors d'IA (GEO/AEO): captem clients i fem que la teva marca aparegui on et busquen, també a ChatGPT, Gemini i Perplexity.

Més info

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.

Live Chat