Objetivo técnico
Al terminar podrás modelar el contrato de una respuesta RAG y transformar sus citas con seguridad. TypeScript no cambia lo que ocurre al ejecutar el programa: revisa antes si los valores tienen la forma esperada.
Antes de empezar
Necesitas Node, npm y un editor. Crea una carpeta y ejecuta npm init -y y npm install -D typescript tsx. No necesitas dominar clases ni genéricos.
Paso a paso
- Crea
src/check.tsy define la forma de una cita y de la respuesta:
type Citation = { id: string; source: string; excerpt: string };
type AskResponse = { answer: string; citations: Citation[] };
const result: AskResponse = {
answer: 'La devolución tarda 30 días.',
citations: [{ id: 'c1', source: 'politicas.md', excerpt: 'Plazo: 30 días' }],
};
const sources = result.citations.map((citation) => citation.source);
console.log(result.answer, sources);
- Ejecuta
npx tsx src/check.ts. - Cambia
answerpor el número30. El editor onpx tsc --noEmit src/check.tsdebe marcar que un número no esstring. - Revierte el cambio. Observa que
maprecibe cadaCitation; no necesitas repetir el tipo.
Verificación
El código debe imprimir la respuesta y ['politicas.md']. Después, npx tsc --noEmit src/check.ts debe terminar sin errores.
Errores frecuentes
- Usar
anypara silenciar un problema elimina la protección. - Confundir
CitationconCitation[]: uno es un objeto; el otro, una colección. - Creer que el tipo valida JSON externo: TypeScript no verifica datos en runtime; eso requiere un schema.
Práctica
Agrega documentId a Citation. Deja que el compilador muestre dónde falta y corrige el objeto. Luego filtra las citas cuyo source termine en .md.
Puente al RAG
El pipeline del Bloque 5 serializa answer, requestId, usage y citations. Estos tipos permiten mantener el mismo contrato entre retrieval, API y UI.