JavaScript y TypeScript

  1. Introducción
    1. Historia y Evolución de JavaScript y TypeScript
      1. Origen de JavaScript en el navegador (Brendan Eich, 1995)
      2. Estándar ECMAScript y rol de ECMA International
      3. Comité TC39 y proceso de propuestas
      4. Evolución de ECMAScript (ES3, ES5, ES2015+)
      5. Aparición de TypeScript como superconjunto tipado de JavaScript
      6. Filosofía de TypeScript: tipado estático opcional y verificación en tiempo de compilación
      7. Compatibilidad progresiva con JavaScript existente
      8. Influencia de C#, Java y lenguajes estáticos en el diseño de TypeScript
      9. Adopción en backend, frontend y full-stack
      10. Impacto de Node.js en el uso de JavaScript fuera del navegador
      11. Expansión del ecosistema: Deno, Bun y runtimes alternativos
      12. Evolución del tooling: bundlers, transpiladores, linters
      13. Uso de TypeScript en grandes bases de código y monorepos
      14. Transición de JavaScript clásico basado en funciones a clases, módulos y async/await
      15. “Any valid JavaScript is valid TypeScript” como principio de diseño
    2. Versiones y Compatibilidad
      1. Versionado semántico de TypeScript
      2. Versionado de Node.js y compatibilidad con ECMAScript
      3. target y lib en tsconfig.json
      4. Downleveling y transpilación (ESNext → ES5)
      5. Compatibilidad con navegadores y entornos legacy
      6. Polyfills y core-js
      7. Características propuestas (stage 0–4) y su adopción en TypeScript
      8. Estabilidad de sintaxis frente a features experimentales
      9. Tipos DOM según versión de @types/web
      10. Estrategias de upgrade mayor de TypeScript en proyectos grandes
      11. Compatibilidad entre módulos ES (import/export) y CommonJS (require/module.exports)
      12. Detección de versión en runtime (process.versions, navigator.userAgent)
      13. Dependencia en especificación del Event Loop del host (browser vs Node)
      14. Compatibilidad entre distintos bundlers y empaquetadores
      15. Compatibilidad entre ts-node, tsx, babel, esbuild
    3. Instalación del Entorno
      1. Instalación de Node.js (instalador oficial)
      2. Instalación con nvm / fnm / asdf
      3. Instalación de Deno
      4. Instalación de Bun
      5. npm como package manager por defecto
      6. yarn clásico y yarn modern
      7. pnpm y almacenamiento global basado en content-addressable store
      8. Instalación global de typescript (npm install -g typescript)
      9. Instalación local de typescript como dependencia de desarrollo
      10. Verificación de node, npm, tsc en PATH
      11. Configuración inicial de proyecto (npm init, pnpm init, yarn init)
      12. Inicialización de TypeScript (tsc --init)
      13. Estructura de carpetas recomendada (src, dist, test)
      14. Soporte multiplataforma (Windows, macOS, Linux)
      15. Contenedores y devcontainers (Dockerfile, devcontainer.json)
    4. Ejecución de Código y REPL
      1. Ejecución directa de JavaScript con node archivo.js
      2. REPL interactivo de Node.js
      3. Ejecución directa de TypeScript con ts-node
      4. Ejecución directa de TypeScript con tsx
      5. Ejecución TypeScript nativa en Deno
      6. Ejecución TypeScript nativa en Bun
      7. Compilación explícita con tsc y luego ejecución con Node.js
      8. Flags comunes de Node (--inspect, --require, --experimental-*)
      9. Flags comunes de ts-node / tsx
      10. Uso de importaciones ES en Node ("type": "module")
      11. Uso de la consola del navegador como entorno interactivo
      12. Ejecución en entornos sandbox (CodeSandbox, StackBlitz)
      13. I/O estándar (stdin, stdout, stderr) en Node
      14. Pipes y redirección de salida en CLI de Node
      15. Hot reload durante desarrollo con nodemon, ts-node-dev
    5. IDEs y Editores
      1. Visual Studio Code y el Language Service de TypeScript
      2. WebStorm / IntelliJ IDEA con soporte TypeScript integrado
      3. Neovim con LSP (typescript-language-server)
      4. Vim con coc.nvim y extensiones TS
      5. Emacs con lsp-mode y tide
      6. Autocompletado, IntelliSense y sugerencias de tipo
      7. Navegación de código (Go to Definition, Find References)
      8. Refactorizaciones automáticas (renombrar símbolos, extraer funciones)
      9. Soporte de linters (ESLint) integrado en el editor
      10. Formato automático con Prettier
      11. Integración de debuggers (Chrome DevTools, Node Inspector)
      12. Integración con Git y control de versiones
      13. Snippets y plantillas de código repetitivo
      14. Diagnóstico en tiempo real del compilador de TypeScript
      15. Entornos de notebooks JS/TS (Quokka, Jupyter con kernels JS)
    6. Entornos de Proyecto y Aislamiento
      1. node_modules como entorno aislado por proyecto
      2. package.json como descriptor de entorno
      3. package-lock.json, yarn.lock, pnpm-lock.yaml
      4. Resolución determinista de dependencias
      5. Workspaces (yarn workspaces, pnpm workspaces, npm workspaces)
      6. Monorepos y herramientas (turbo, nx, lage)
      7. Separación entre dependencias de runtime (dependencies) y de build (devDependencies)
      8. Scripts de proyecto (npm run, pnpm run)
      9. Estrategias de versionado interno en monorepos
      10. Aislamiento por versión de Node usando nvm dentro del proyecto
      11. Contenedores reproducibles para desarrollo (Docker Compose)
      12. Variables de entorno (.env, dotenv, process.env)
      13. Reproducibilidad de builds en CI
      14. Caché incremental de transpilación y bundling
      15. Estándares de estructura de carpetas (src, lib, dist, scripts)
    7. Gestión de Paquetes y Dependencias
      1. npm install, npm update, npm uninstall
      2. yarn add, yarn remove, yarn upgrade
      3. pnpm add, pnpm remove, pnpm update
      4. Versiones fijas vs rangos (^, ~, *)
      5. Dependencias opcionales y peer dependencies
      6. Resolución de conflictos de versiones
      7. Auditoría de dependencias (npm audit, pnpm audit)
      8. Firma y verificación de integridad (shasum)
      9. Repositorios privados (Artifactory, Verdaccio)
      10. Instalaciones link/workspace locales
      11. Publicación de paquetes internos
      12. Tipos externos (@types/*) para librerías JS puras
      13. Mantenimiento de typesVersions en librerías TypeScript
      14. Dependencias transpiladas vs dependencias puras ESM
      15. Gestión de binarios nativos precompilados
    8. Herramientas del Ecosistema Web
      1. Bundlers (webpack, esbuild, rollup, vite)
      2. Compilación incremental y HMR (Hot Module Replacement)
      3. Transformación con Babel
      4. Minificación y tree-shaking
      5. Code splitting y lazy loading
      6. Sourcemaps y depuración en el navegador
      7. Polyfills automáticos según destino
      8. Linter y formateador integrados en pipeline de build
      9. Pruebas unitarias integradas en bundlers (vitest)
      10. Empaquetado para navegadores antiguos
      11. Empaquetado para runtimes edge
      12. Bundles isomórficos (SSR + CSR)
      13. Configuración multi-target (web, node, worker)
      14. Generación de tipos .d.ts
      15. Publicación de librerías como ESM y CJS
  2. Fundamentos
    1. Tipos Básicos y el Sistema de Tipos de TypeScript
      1. Declaración de variables con let, const, var
      2. Inferencia de tipos
      3. Anotaciones de tipo explícitas
      4. Tipos primitivos (string, number, boolean)
      5. Tipos null, undefined, void
      6. Tipos bigint y symbol
      7. Tipos literales ("ok", 42, true)
      8. Tipos unión (|)
      9. Tipos intersección (&)
      10. Tipos any, unknown, never
      11. Alias de tipo (type)
      12. Interfaces (interface)
      13. Tuplas ([T, U])
      14. Enums (enum, const enum)
      15. Objetos con propiedades opcionales y readonly
    2. Operadores
      1. Operadores aritméticos (+, -, *, /, %, **)
      2. Operadores de asignación compuesta (+=, -=, *=, etc.)
      3. Operadores de comparación (===, !==, <, >, <=, >=)
      4. Operadores lógicos (&&, ||, !)
      5. Operador de fusión nula (??)
      6. Operador de encadenamiento opcional (?.)
      7. Operadores bitwise (&, |, ^, ~, <<, >>, >>>)
      8. Operador ternario (cond ? A : B)
      9. Operadores de propagación (...spread)
      10. Destructuración de arrays y objetos
      11. Precedencia y asociatividad de operadores
      12. Cortocircuito en ||, && y ??
      13. Coerción implícita con == vs comparación estricta ===
      14. delete para eliminar propiedades de objetos
      15. in y instanceof para verificación de pertenencia y tipo
    3. Control de Flujo
      1. if, else if, else
      2. switch y case
      3. for, for...of, for...in
      4. while y do...while
      5. break y continue
      6. Etiquetas de bucle (label:)
      7. Bloques con {} y alcance léxico
      8. Guard clauses y retornos tempranos
      9. throw para interrupción de flujo
      10. Narrowing de tipos dentro de condiciones
      11. Type guards personalizados con predicados (param is Tipo)
      12. Flujo de control basado en in, typeof, instanceof
      13. Exhaustividad en switch con never
      14. Assertions de no-nulo (!)
      15. Patrones de control de flujo funcional (array.filter, array.map)
    4. Funciones
      1. Declaraciones de función (function foo() {})
      2. Funciones flecha (const f = () => {})
      3. Parámetros tipados
      4. Parámetros opcionales (param?: T)
      5. Parámetros con valor por defecto
      6. Parámetros rest (...args: T[])
      7. Tipado de retorno explícito
      8. Funciones que retornan void
      9. Funciones que nunca retornan (never)
      10. Sobrecarga de funciones (signaturas múltiples)
      11. Funciones genéricas (<T>)
      12. Clausuras y entorno léxico
      13. this y binding explícito
      14. call, apply, bind
      15. Funciones async (async function)
    5. Errores y Excepciones
      1. try, catch, finally
      2. Lanzar errores (throw new Error())
      3. Tipado del valor capturado en catch
      4. Errores síncronos vs rechazos de Promesas
      5. Errores personalizados (class MiError extends Error)
      6. Rechazo de Promesas sin catch
      7. Manejo de errores en funciones async/await
      8. Promise.catch y try/catch async
      9. Errores de tipo (TypeError, RangeError, etc.)
      10. Assertions de tipo mal usadas y errores en runtime
      11. Enmascaramiento de errores con any
      12. Estrategias de logging de errores
      13. Errores fatales en Node (process.exit)
      14. Manejo centralizado de errores en aplicaciones web
      15. Errores recuperables vs no recuperables
    6. Entorno Global y Builtins
      1. Objeto global (globalThis)
      2. Objetos estándar (Object, Array, Map, Set)
      3. Math y operaciones numéricas
      4. Date y tiempo en milisegundos
      5. JSON (parse/stringify)
      6. console para salida estándar
      7. Promise como primitiva de async
      8. Symbol como clave única
      9. BigInt para enteros grandes
      10. RegExp para expresiones regulares
      11. Error y subclases integradas
      12. URL y URLSearchParams
      13. Intl e internacionalización
      14. TextEncoder / TextDecoder
      15. AbortController y cancelación
    7. Módulos e Imports
      1. Módulos ES (import, export)
      2. Importaciones por nombre y por defecto
      3. Reexportaciones (export * from)
      4. Import dinámico (import())
      5. Namespaces internos en TypeScript (namespace, legado)
      6. CommonJS (require, module.exports)
      7. Uso de "type": "module" en Node
      8. Resolución de rutas relativas y absolutas
      9. Alias de paths en tsconfig.json (paths, baseUrl)
      10. Barrel files (index.ts)
      11. Separación de tipos y valores en imports (import type)
      12. export type para exponer sólo tipos
      13. Árbol de dependencias y ciclos
      14. Side effects de módulos
      15. División lógica por capas (domain, infra, ui)
    8. Plataforma y Entorno de Ejecución
      1. DOM y APIs del navegador
      2. Node.js y APIs del sistema de archivos
      3. Web Workers y aislamiento de hilos en navegador
      4. Service Workers y ciclo offline
      5. APIs WebCrypto
      6. fetch y red HTTP
      7. Web Storage (localStorage, sessionStorage)
      8. IndexedDB
      9. Streams en navegador
      10. Streams en Node (fs.createReadStream)
      11. Timers (setTimeout, setInterval)
      12. Event Loop (cola de tareas y microtareas)
      13. APIs de proceso en Node (process, os)
      14. Variables de entorno y configuración
      15. Interoperabilidad entre frontend y backend con el mismo lenguaje
  3. Estructuras y Manipulación de Datos
    1. Estructuras de Datos Fundamentales
      1. Arrays dinámicos (Array<T>)
      2. Tuplas tipadas en TypeScript
      3. Objetos literales como mapas clave-valor
      4. Map y WeakMap
      5. Set y WeakSet
      6. Pilas (stack) basadas en arrays
      7. Colas (queue) basadas en arrays
      8. Colas dobles (deque) con estructuras circulares
      9. Árboles y tries implementados en objetos/Map
      10. Grafos representados con listas de adyacencia
      11. Tablas hash y colisiones (visión conceptual)
      12. Inmutabilidad estructural con readonly
      13. Clonado superficial vs profundo (structuredClone)
      14. Comparación por referencia vs comparación por valor
      15. Uso de Object.freeze
    2. Iteradores y Generadores
      1. Protocolo iterable ([Symbol.iterator])
      2. Protocolo async iterable ([Symbol.asyncIterator])
      3. for...of para recorrer iterables
      4. Generadores (function*)
      5. Generadores async (async function*)
      6. yield y comunicación bidireccional
      7. Iteradores personalizados en clases
      8. Consumo manual de iteradores (next())
      9. Generadores como reemplazo de estados internos complejos
      10. Streams de datos perezosos
      11. Composición de generadores
      12. Uso de generadores para testing y mocking
      13. Adaptación de callbacks a iterables async
      14. Backpressure conceptual en flujos iterables
      15. Comparación entre for...of y métodos de array
    3. Arrays y Métodos Funcionales
      1. push, pop, shift, unshift
      2. slice y splice
      3. map para transformación
      4. filter para selección
      5. reduce para acumulación
      6. some y every
      7. find y findIndex
      8. flat y flatMap
      9. Ordenamiento con sort
      10. Comparadores personalizados en sort
      11. Copia inmutable con el spread [...arr]
      12. Particionamiento y groupBy (patrones comunes)
      13. Deduplicación usando Set
      14. Zipping y combinaciones de arrays
      15. Arrays tipados (Uint8Array, Float32Array, etc.)
    4. Manipulación de Strings y Texto
      1. Literales de string simples y template strings
      2. Concatenación y +
      3. Substrings y slice
      4. Búsqueda (indexOf, includes, startsWith, endsWith)
      5. Reemplazo (replace, replaceAll)
      6. División (split)
      7. Unión (join) desde arrays
      8. Normalización Unicode (normalize)
      9. Interpolación con template literals
      10. Construcción incremental de strings (buffers de strings)
      11. Codificación y decodificación (TextEncoder, TextDecoder)
      12. Serialización y deserialización JSON (JSON.stringify, JSON.parse)
      13. Escapado seguro para HTML (patrones)
      14. Plantillas etiquetadas (tagged templates)
      15. Internacionalización de texto con Intl.MessageFormat (visión general)
    5. Expresiones Regulares
      1. Literales /patrón/flags
      2. Constructor new RegExp()
      3. Flags comunes (g, i, m, s, u, y)
      4. Grupos de captura
      5. Grupos con nombre ((?<name>...))
      6. Lookahead y lookbehind
      7. Cuantificadores (+, *, {m,n})
      8. Límites de palabra y línea (\b, ^, $)
      9. Métodos test, exec
      10. Métodos de string que aceptan regex (match, matchAll, replace, split)
      11. Rendimiento y backtracking excesivo
      12. Sanitización de entradas dinámicas en regex
      13. Comparación regex vs parseadores dedicados
      14. Construcción dinámica de patrones seguros
      15. Patrones comunes para validación de datos
    6. Archivos, Streams y Datos Binarios
      1. Sistema de archivos en Node (fs.readFile, fs.writeFile)
      2. Streams legibles y escribibles en Node (fs.createReadStream)
      3. Pipes (readable.pipe(writable))
      4. Buffers (Buffer)
      5. Lectura de binarios (Buffer, Uint8Array)
      6. Escritura incremental de logs y datos
      7. Manejo de archivos grandes sin cargar todo a memoria
      8. Blob y File en el navegador
      9. Descarga de archivos en navegador (creación de enlaces dinámicos)
      10. Subida de archivos con FormData
      11. fetch con ReadableStream
      12. Streams web (ReadableStream, WritableStream, TransformStream)
      13. Compresión y descompresión en Node (módulo zlib)
      14. Archivos temporales y directorios temporales
      15. Permisos y rutas en distintos sistemas operativos
    7. Datos Especializados y Formatos
      1. CSV (parseo manual y librerías)
      2. JSON estructurado
      3. YAML y TOML en configuración
      4. XML y DOMParser
      5. HTML como árbol DOM
      6. Markdown como formato de contenido
      7. Binary blobs (imágenes, audio)
      8. ArrayBuffer y DataView
      9. Estructuras binarias con offsets fijos
      10. WebSockets como canal binario o texto
      11. IndexedDB como base de datos del navegador
      12. LocalStorage / SessionStorage como key-value store
      13. Cache Storage en Service Workers
      14. Serialización estructurada (structuredClone)
      15. Mensajería entre hilos (postMessage)
    8. Tiempo y Fechas
      1. Objeto Date
      2. Timestamp en milisegundos desde Epoch
      3. Date.now() y mediciones rápidas
      4. Formateo manual de fechas
      5. Librerías de fechas (luxon, date-fns)
      6. Zonas horarias e Intl.DateTimeFormat
      7. Parseo de cadenas de fecha
      8. Medición de rendimiento con performance.now()
      9. setTimeout y temporizadores
      10. setInterval y loops periódicos
      11. Cancelación de temporizadores (clearTimeout, clearInterval)
      12. Animaciones ligadas a requestAnimationFrame
      13. Sincronización de relojes entre cliente y servidor
      14. Cuestiones de DST y horario de verano
      15. Desfase entre reloj del sistema y reloj del servidor
  4. Programación Estructurada y Modular
    1. Programación Orientada a Objetos (POO) en TypeScript/JavaScript
      1. Clases (class)
      2. Constructores (constructor)
      3. Propiedades de instancia
      4. Propiedades estáticas
      5. Métodos de instancia y estáticos
      6. Herencia con extends
      7. super y sobreescritura de métodos
      8. Modificadores de acceso (public, private, protected)
      9. Campos readonly
      10. Campos opcionales en clases
      11. Clases abstractas (abstract class)
      12. Métodos abstractos
      13. Interfaces como contratos de clases
      14. Implementación múltiple de interfaces
      15. Mixins y composición en lugar de herencia múltiple
    2. Decoradores y Metadatos
      1. Decoradores de clase
      2. Decoradores de método
      3. Decoradores de propiedad
      4. Decoradores de parámetro
      5. Metadata Reflection (reflect-metadata)
      6. Patrones de inyección de dependencias con decoradores
      7. Decoradores para validación
      8. Decoradores para logging y trazas
      9. Decoradores para binding automático de this
      10. Decoradores en frameworks (Angular, NestJS)
      11. Estado de estandarización de decoradores TC39
      12. Implicancias en tree-shaking y minificación
      13. Uso de decoradores en tests y mocks
      14. Decoradores y compatibilidad con emitDecoratorMetadata
      15. Consideraciones de rendimiento y orden de evaluación
    3. Módulos, Capas y Arquitectura
      1. Patrones de organización por dominio
      2. Patrones de organización por tipo (controllers, services, utils)
      3. Capas de infraestructura, dominio y aplicación
      4. Capas de UI, lógica y acceso a datos
      5. Módulos ES y carga estática
      6. Carga dinámica con import()
      7. CommonJS en entornos legacy
      8. Barrel modules (index.ts)
      9. Separación entre tipos y valores (import type)
      10. Evitar dependencias circulares
      11. Namespaces internos (histórico en TS)
      12. API pública vs detalles internos
      13. Versionado semántico de módulos internos
      14. Gestión de rutas absolutas con paths en tsconfig.json
      15. Monorepos con múltiples paquetes versionados
    4. Logging y Observabilidad
      1. console.log, console.warn, console.error
      2. Loggers estructurados (pino, winston)
      3. Niveles de log (debug, info, warn, error)
      4. Serialización segura de objetos en logs
      5. Formato JSON para logs machine-readable
      6. Logging en el navegador vs logging en Node
      7. Redacción de datos sensibles en logs
      8. Logs de rendimiento y tiempos de respuesta
      9. Integración con sistemas externos (APM)
      10. Trazas distribuidas (traceId, spanId)
      11. Métricas y contadores personalizados
      12. Alertas basadas en logs
      13. Integración con console.group y console.table
      14. Uso de debug namespaced en Node
      15. Logging condicional según NODE_ENV
    5. Documentación y Comentarios de Tipo
      1. Comentarios JSDoc
      2. Etiquetas @param, @returns, @deprecated
      3. Comentarios de tipo en JavaScript con // @ts-check
      4. Inferencia de tipos a partir de JSDoc
      5. TSDoc y convenciones para librerías públicas
      6. Generación automática de documentación de API
      7. Documentación en línea para funciones públicas
      8. Documentación para consumidores externos vs internos
      9. Comentarios de intención vs comentarios obvios
      10. Contratos de interfaz y documentación de invariantes
      11. Versionado de la documentación junto al código
      12. README técnicos por paquete
      13. Diagramas de arquitectura en monorepos
      14. Uso de /** @internal */ y visibilidad interna
      15. Control de documentación para clientes externos en SDKs
    6. Testing
      1. jest como framework de pruebas
      2. vitest y entornos ESM
      3. mocha + chai
      4. uvu, tape y frameworks minimalistas
      5. Pruebas unitarias
      6. Pruebas de integración
      7. Pruebas de extremo a extremo (E2E)
      8. Pruebas en navegador con Playwright
      9. Pruebas de API con Supertest / fetch mockeado
      10. Snapshots de UI
      11. Cobertura de código (coverage, istanbul, c8)
      12. Mocks y espías (jest.fn)
      13. Fixtures reutilizables
      14. Tests async/await y control de timers falsos
      15. Ejecución de tests en CI/CD
    7. Depuración
      1. Debugger en Chrome DevTools
      2. Debugger en VS Code (launch.json)
      3. node --inspect y el inspector de Node
      4. Breakpoints condicionales
      5. debugger; en el código
      6. Sourcemaps para mapear TypeScript → JavaScript
      7. Inspección de pila de llamadas (stack trace)
      8. Inspección de variables locales en tiempo real
      9. Watch expressions en el debugger
      10. Performance Profiler en navegador
      11. Heap snapshot para memoria
      12. Análisis de fugas de memoria en Node
      13. Depuración de Promesas rechazadas
      14. Seguimiento de eventos async en DevTools
      15. Depuración remota en contenedores y servidores
    8. Patrones de Diseño y Buenas Prácticas
      1. Programación funcional vs POO en JavaScript moderno
      2. Patrón módulo
      3. Patrón fábrica
      4. Patrón singleton
      5. Patrón estrategia
      6. Patrón adaptador
      7. Patrón fachada
      8. Patrón decorador (a nivel de objetos)
      9. Patrón observador (EventEmitter)
      10. Inyección de dependencias
      11. Patrón repositorio en capas de datos
      12. Patrón builder y objetos inmutables
      13. Patrón middleware (pipelines de funciones)
      14. Separación de concerns entre dominio y framework
      15. Diseño orientado a interfaces en TypeScript
  5. Estructuras Avanzadas y Programación Funcional
    1. Programación Funcional
      1. Funciones puras
      2. Inmutabilidad de datos
      3. Evitar efectos secundarios
      4. map, filter, reduce como patrones
      5. Composición de funciones
      6. Currificación y partial application
      7. Funciones de orden superior
      8. Aplicaciones point-free
      9. Inmutabilidad estructural con readonly
      10. Patrones de actualización inmutable con spread
      11. Librerías de FP (Ramda)
      12. Monads y Either / Result (patrones funcionales)
      13. Option / Maybe como alternativa a null
      14. Validación funcional de datos
      15. Manejo funcional de errores en Promesas
    2. Iterables Avanzados y Generadores
      1. Iteración lazy para eficiencia
      2. Pipelines de datos con generadores
      3. Transformaciones paso a paso sin arrays intermedios
      4. Generadores async para streams remotos
      5. Consumo incremental de APIs paginadas
      6. Backpressure conceptual en streams async
      7. Coordinación de multitarea con generadores
      8. Implementación de Symbol.iterator
      9. Implementación de Symbol.asyncIterator
      10. Reintentos y recolección gradual de datos
      11. Iteradores infinitos controlados
      12. Conversión entre generadores y arrays
      13. Iteración sobre estructuras personalizadas
      14. for await...of en flujo async
      15. Patrones de pausar y reanudar ejecución
    3. Buffers Binarios y Vistas de Memoria
      1. ArrayBuffer
      2. DataView
      3. Typed arrays (Uint8Array, Float64Array)
      4. Interpretación de datos binarios crudos
      5. Endianness y lectura multibyte
      6. Construcción de protocolos binarios personalizados
      7. Conversión entre Buffer (Node) y typed arrays
      8. Serialización eficiente para red
      9. WebSockets binarios
      10. WebRTC DataChannels binarios
      11. Transferencia de memoria entre hilos (postMessage con transfer)
      12. Uso en criptografía y hashing
      13. Parsing de archivos multimedia
      14. Procesamiento de audio en tiempo real
      15. Integración con WebAssembly (memoria compartida)
    4. Rendimiento y Profiling
      1. Micro-optimizaciones vs optimización algorítmica
      2. Complejidad temporal y espacial en JS/TS
      3. Perfilador de rendimiento del navegador
      4. Perfilador de CPU en Node
      5. Perfilador de heap y memory leaks
      6. performance.now() y medición precisa
      7. console.time y console.timeEnd
      8. Optimización de loops
      9. Evitar trabajo innecesario en renders UI
      10. Evitar bloqueos del Event Loop
      11. Web Workers para tareas pesadas
      12. División de código (code splitting)
      13. Carga diferida (lazy loading)
      14. Caché de resultados (memoización)
      15. Optimización de serialización/deserialización JSON
    5. Calidad de Código y Estándares
      1. ESLint
      2. Reglas de estilo y convenciones del equipo
      3. Prettier como formateador de código
      4. Reglas específicas de TypeScript (@typescript-eslint)
      5. Reglas de seguridad (no eval, no Function dinámica insegura)
      6. Reglas de complejidad ciclomática
      7. Reglas de longitud de archivo y función
      8. Detección de dead code
      9. Análisis estático del flujo de null/undefined
      10. Revisiones de código (pull requests)
      11. Hooks de pre-commit (lint-staged, husky)
      12. Convenciones de nombres (camelCase, PascalCase, UPPER_CASE)
      13. Convenciones de carpetas (utils, services, components)
      14. Convenciones para manejo de errores
      15. Documentación de decisiones arquitectónicas
    6. Seguridad y Criptografía
      1. Modelos de amenaza en aplicaciones web
      2. XSS (Cross-Site Scripting)
      3. CSRF (Cross-Site Request Forgery)
      4. Inyección de código en templates
      5. Validación y sanitización de input
      6. DOMPurify y sanitización HTML
      7. CORS y restricciones de origen
      8. Content Security Policy (CSP)
      9. Gestión de tokens y cookies seguras
      10. Almacenamiento seguro en localStorage vs cookies
      11. crypto.subtle y WebCrypto API
      12. Hashing y firma digital en el navegador
      13. Seguridad en Node (fugas de secretos en logs)
      14. Dependencias vulnerables y npm audit
      15. Gestión de secretos en variables de entorno
    7. Tipado Avanzado en TypeScript
      1. Tipos genéricos (<T>)
      2. Restricciones de genéricos (<T extends U>)
      3. Tipos condicionales (T extends U ? X : Y)
      4. Tipos inferidos en condicionales (infer)
      5. Tipos mapeados ({[K in Keys]: ...})
      6. keyof y manipulación de llaves
      7. Index signatures ([key: string]: T)
      8. readonly en tipos
      9. Remapeo de modificadores (-readonly, ?)
      10. Utility types estándar (Partial, Required, Pick, Omit)
      11. Record<K,V> y diccionarios tipados
      12. ReturnType, Parameters, ConstructorParameters
      13. ThisType y tipado contextual de this
      14. Inferencia contextual en funciones flecha
      15. Branding y nominal typing (patrón type ID = string & {__brand: "ID"})
    8. Validación de Datos y Esquemas
      1. Validación en runtime vs chequeo estático
      2. Zod y esquemas tipados
      3. io-ts y decodificación segura
      4. Validación de requests HTTP
      5. Validación de respuestas de APIs externas
      6. Aserciones de tipo (asserts value is Tipo)
      7. Narrowing manual con validadores
      8. Serialización segura para persistencia
      9. Sanitización de datos antes de guardarlos
      10. Transformaciones de entrada (DTOs)
      11. Contratos entre capas frontend y backend
      12. Tipos compartidos entre cliente y servidor
      13. Versionado de esquemas de datos
      14. Compatibilidad hacia atrás en APIs
      15. Migraciones de estructura de datos en el tiempo
  6. Concurrencia, Async y Bajo Nivel
    1. Async y Concurrencia en JavaScript
      1. Modelo single-threaded y Event Loop
      2. Promise como unidad básica de async
      3. async / await
      4. Estados de una Promesa (pending, fulfilled, rejected)
      5. Cadena de Promesas con .then
      6. Manejo de errores con .catch
      7. Ejecución paralela con Promise.all
      8. Ejecución competitiva con Promise.race
      9. Ejecución tolerante a fallas con Promise.allSettled
      10. Control de concurrencia con colas y semáforos userland
      11. Espera activa vs espera pasiva
      12. Bloqueos del Event Loop y CPU-bound
      13. Uso de Web Workers para CPU-bound en navegador
      14. Uso de worker_threads en Node
      15. Cancelación cooperativa con AbortController
    2. Networking y Comunicación
      1. fetch y solicitudes HTTP
      2. XMLHttpRequest (legado)
      3. WebSockets
      4. Server-Sent Events (SSE)
      5. gRPC-Web (patrones)
      6. Protocolos binarios sobre TCP en Node (net)
      7. HTTPS en Node (https)
      8. HTTP/2 y multiplexación
      9. Tiempo de espera y reintentos
      10. Política de mismo origen en navegador
      11. CORS y credenciales
      12. Serialización y deserialización JSON
      13. Streaming de respuesta con ReadableStream
      14. Subida de archivos en trozos (chunked upload)
      15. APIs en tiempo real y suscripción de eventos
    3. Multithreading, Workers y Paralelismo
      1. Web Workers en navegador
      2. Dedicated Workers vs Shared Workers
      3. Transferencia de buffers entre hilos
      4. SharedArrayBuffer
      5. Atomics y sincronización de memoria compartida
      6. worker_threads en Node
      7. Clustering de procesos en Node (cluster)
      8. Balanceo de carga en múltiples workers
      9. Comunicación entre workers con postMessage
      10. Aislamiento de estado y side effects
      11. Pools de workers
      12. Limitaciones de acceso al DOM en Web Workers
      13. Aceleración de tareas pesadas (compresión, hashing)
      14. Streams entre threads
      15. Diseño de pipelines paralelos
    4. Metaprogramación y Reflexión
      1. Proxy para interceptar acceso a objetos
      2. Reflect para operaciones de bajo nivel
      3. Definición de propiedades con Object.defineProperty
      4. Descriptores de propiedad (get, set, enumerable, configurable)
      5. Object.getPrototypeOf y Object.setPrototypeOf
      6. Object.freeze y Object.seal
      7. Patrón de interceptores y validación dinámica
      8. Generación dinámica de clases y funciones
      9. Evaluación dinámica de código (riesgos de eval)
      10. Serialización y reconstrucción dinámica de objetos
      11. Decoradores (propuesta TC39) como metaprogramación declarativa
      12. Metadatos de tipos en runtime (emulación con reflect-metadata)
      13. Inspección de stack trace y Error.captureStackTrace
      14. Patrones AOP (aspect-oriented programming) con Proxies
      15. Instrumentación dinámica para profiling
    5. Gestión de Recursos y Ciclo de Vida
      1. try/finally para liberar recursos
      2. Cancelación con AbortController
      3. Control manual de conexiones abiertas
      4. Streams y close/destroy
      5. Suscripciones a eventos y removeEventListener
      6. Limpieza de setInterval y setTimeout
      7. Manejadores de cierre de proceso en Node (process.on("exit"))
      8. Gestión de sockets abiertos
      9. Liberación de handles en tests
      10. Patrones de “destructor” manual en JS
      11. Patrones using y Symbol.dispose (propuesta)
      12. Control explícito de sesiones y tokens
      13. Recursos del DOM (observadores, listeners)
      14. Evitar fugas de listeners en SPAs
      15. Limpieza de workers inactivos
    6. Monitoreo, Métricas y Telemetría
      1. console.time y console.count
      2. Performance API en navegador
      3. Node perf_hooks para medición
      4. Recolección de métricas de latencia
      5. Recolección de métricas de throughput
      6. Métricas de uso de memoria
      7. Métricas de GC y pausas
      8. Logs estructurados con IDs de correlación
      9. Trazas distribuidas con headers de tracing
      10. Exportación de métricas a sistemas externos
      11. Alertas automáticas en producción
      12. Health checks y endpoints /health
      13. Rate limiting y mecanismos antiabuso
      14. Auditoría de acciones del usuario
      15. Observabilidad en entornos serverless / edge
    7. Recolección de Basura y Memoria
      1. Modelo de memoria administrada en JS
      2. Recolección de basura generacional
      3. Referencias fuertes vs débiles
      4. WeakMap y WeakSet
      5. WeakRef y FinalizationRegistry
      6. Fugas de memoria por referencias colgantes
      7. Fugas de memoria en closures
      8. Fugas de memoria en listeners no removidos
      9. Fragmentación de heap
      10. Trazas de heap en DevTools
      11. Monitoreo de uso de memoria en Node
      12. Límites de memoria en entornos serverless
      13. Impacto de objetos gigantes y arrays densos
      14. Uso de estructuras inmutables para evitar duplicados grandes
      15. Pausas de GC y rendimiento en tiempo real
    8. Interoperabilidad con Bajo Nivel y WebAssembly
      1. WebAssembly en el navegador
      2. Cargar módulos WebAssembly desde JavaScript
      3. Tipos numéricos de bajo nivel en WebAssembly
      4. Compartir memoria entre WebAssembly y JS
      5. Llamar funciones WebAssembly desde JS
      6. Llamar funciones JS desde WebAssembly
      7. Uso de WebAssembly para cómputo intensivo
      8. Integración con librerías compiladas (C/C++/Rust)
      9. WebAssembly en Node
      10. Conversión de buffers binarios para FFI
      11. Overhead de cruce de frontera JS ↔ WASM
      12. Control de tiempo real y latencia baja
      13. Seguridad y sandboxing de WebAssembly
      14. Reutilización de lógica en cliente y servidor vía WASM
      15. Limitaciones de WebAssembly frente a JS puro
  7. Implementación y Distribución
    1. Herramientas de Entorno y Configuración
      1. tsconfig.json y opciones del compilador
      2. target y nivel de ECMAScript emitido
      3. module y formato de salida (ESNext, CommonJS)
      4. moduleResolution y resolución de paths
      5. strict y modo estricto
      6. noImplicitAny
      7. strictNullChecks
      8. esModuleInterop y compatibilidad con CommonJS
      9. skipLibCheck y rendimiento de compilación
      10. declaration y generación de .d.ts
      11. sourceMap para depuración
      12. outDir y rootDir
      13. Configuración por proyecto y references
      14. Proyectos incrementales (composite)
      15. paths y alias internos de importación
    2. Motores e Implementaciones de JavaScript
      1. V8 (Chrome, Node)
      2. SpiderMonkey (Firefox)
      3. JavaScriptCore (Safari)
      4. Chakra (histórico)
      5. Node.js como runtime en servidor
      6. Deno como runtime seguro y TS-first
      7. Bun como runtime y bundler integrado
      8. Cloudflare Workers / runtimes edge
      9. Service Workers y ejecución offline en navegador
      10. Motores en entornos embebidos (Electron)
      11. JS en entornos móviles híbridos
      12. Diferencias de API entre runtimes
      13. globalThis como abstracción común
      14. Límite de memoria y CPU en entornos edge/serverless
      15. Compatibilidad con módulos ES nativos
    3. Empaquetado, Build y Publicación
      1. webpack y empaquetado tradicional
      2. rollup para librerías
      3. esbuild y builds ultrarrápidos
      4. vite y desarrollo con HMR
      5. Transpilación con tsc
      6. Transpilación con Babel
      7. Tree-shaking y eliminación de código muerto
      8. Code splitting dinámico
      9. Generación de bundles múltiples (cjs, esm, iife)
      10. Minificación y ofuscación
      11. Generación de tipos .d.ts para consumidores TS
      12. Publicación en npm (npm publish)
      13. Versionado semántico (major.minor.patch)
      14. Changelogs y releases automatizados
      15. Publicación de paquetes privados internos
    4. Aplicaciones de Línea de Comando (CLI)
      1. Scripts ejecutables con Node (#!/usr/bin/env node)
      2. Commander.js para parseo de argumentos
      3. yargs para CLI declarativas
      4. process.argv y parseo manual
      5. Colores y formato en consola (chalk)
      6. Spinners y progreso visual en CLI
      7. Entrada interactiva (inquirer)
      8. Salida estructurada en JSON
      9. Logs y niveles verbosos (-v, --debug)
      10. Errores amigables en CLI
      11. Empaquetado de CLI en un solo archivo
      12. Distribución como paquete npm global
      13. Versionado y flags --version
      14. Comandos compuestos y subcomandos
      15. Autocompletado de shell (bash/zsh/fish)
    5. Aplicaciones Web y UI
      1. DOM y manipulación directa
      2. React y componentes funcionales
      3. JSX y TSX
      4. Hooks y estado local
      5. Estado global (Redux, Zustand)
      6. Context API
      7. Next.js y renderizado del lado del servidor (SSR)
      8. Vue con composición y tipado
      9. Svelte y bindings reactivos
      10. Web Components y customElements.define
      11. Shadow DOM y encapsulación de estilos
      12. CSS Modules / CSS-in-JS
      13. Accesibilidad (a11y)
      14. Persistencia de estado en localStorage
      15. Comunicación con APIs desde la UI
    6. Aplicaciones Móviles, Escritorio y Juegos
      1. React Native
      2. Expo y flujo móvil con TypeScript
      3. Capacitor / Ionic para apps híbridas
      4. Electron para escritorio
      5. Tauri y runtimes ligeros
      6. PWAs (Progressive Web Apps)
      7. Service Workers y caché offline
      8. Notificaciones push
      9. Acceso a hardware (sensores, cámara, micrófono)
      10. APIs de archivos locales en escritorio
      11. Motores gráficos 2D/3D (Pixi.js, Three.js)
      12. Animaciones con requestAnimationFrame
      13. Optimización de render en canvas/WebGL
      14. Sincronización de estado en tiempo real multijugador
      15. Distribución en tiendas (App Store / Play Store) vía wrappers
    7. Internacionalización (i18n) y Localización (l10n)
      1. API Intl
      2. Formato de números y monedas
      3. Formato de fechas y horarios
      4. Pluralización de mensajes
      5. Detección de locale del usuario
      6. Carga dinámica de mensajes traducidos
      7. Separación de traducciones por módulo
      8. Herramientas como i18next
      9. ICU MessageFormat
      10. Manejo de RTL (right-to-left)
      11. Zoned time y horario local
      12. Sensibilidad cultural en contenido
      13. Selección dinámica de fuentes y tipografías
      14. Traducción en build vs runtime
      15. Estrategias de fallback de idioma
    8. DevOps, Entrega y Despliegue
      1. Scripts de build en package.json
      2. Pipelines CI/CD
      3. Pruebas automáticas en cada commit
      4. Lint y type-check en CI
      5. Empaquetado para producción
      6. Despliegue en servidores Node tradicionales
      7. Despliegue serverless (AWS Lambda, Vercel Functions)
      8. Despliegue edge (Cloudflare Workers)
      9. Contenedores Docker para Node
      10. Health checks y monitoreo post-deploy
      11. Rollbacks y despliegues azules/verdes
      12. Feature flags y rollout gradual
      13. Versionado de APIs públicas
      14. Documentación de endpoints y contratos
      15. Observabilidad continua en producción
  8. Internos
    1. Compilador de TypeScript y Proceso de Transpilación
      1. Análisis léxico y parser
      2. Creación del AST (árbol de sintaxis abstracta)
      3. Chequeo de tipos estático
      4. Inferencia de tipos
      5. Ampliación y reducción de uniones
      6. Emisión (emit) de JavaScript
      7. Generación de d.ts para tipos públicos
      8. Sourcemaps para depuración
      9. Proyectos incrementales y tsbuildinfo
      10. Referencias a proyectos (project references)
      11. Diferencias entre tsc y Babel para TS
      12. Limitaciones del chequeo de tipos en tiempo de compilación
      13. Eliminación de tipos y anotaciones en el JS emitido
      14. Transformaciones personalizadas del compilador
      15. Integración del Language Service en el editor
    2. Modelo de Ejecución de JavaScript
      1. Call stack
      2. Contextos de ejecución
      3. Ámbito léxico y closures
      4. Hoisting de variables y funciones
      5. Resolución de this
      6. Strict mode ("use strict")
      7. Event Loop y cola de tareas
      8. Microtareas (Promise.then)
      9. Macrotareas (setTimeout, I/O)
      10. Repaint / reflow del navegador
      11. Prioridades de tareas en el navegador
      12. Bloqueo del main thread
      13. Interacción entre JS y render de la UI
      14. Rechazos no manejados de Promesas
      15. Módulos ES y carga dinámica en runtime
    3. Modelo de Datos y Prototipos
      1. Objetos y prototipos
      2. [[Prototype]] y __proto__
      3. Cadena de prototipos
      4. Herencia basada en prototipos
      5. Clases como azúcar sintáctico sobre prototipos
      6. Descriptores de propiedad
      7. Enumerabilidad e iteración de llaves
      8. Object.keys, Object.values, Object.entries
      9. Object.assign y mezcla de objetos
      10. Sellado y congelamiento de objetos
      11. Inmutabilidad superficial vs profunda
      12. Comparación de objetos por referencia
      13. Serialización con JSON.stringify
      14. Limitaciones de JSON.stringify (funciones, undefined, Symbol)
      15. Clonación estructurada (structuredClone)
    4. Optimizaciones del Motor JavaScript
      1. JIT (Just-In-Time compilation)
      2. Inline caching
      3. Hidden classes
      4. Escape analysis
      5. Optimización de funciones calientes
      6. Deoptimización cuando cambian los tipos
      7. Representación interna de números (double, SMI)
      8. Recolección generacional de basura
      9. Inlining de funciones
      10. Eliminación de bounds checks en arrays
      11. Optimización de bucles apretados
      12. Penalización por megamorphic call sites
      13. Estructuras densas vs dispersas en arrays
      14. Impacto de delete en arrays
      15. Costo de capturar closures con muchas variables
    5. Interoperabilidad Nativa y FFI
      1. Addons nativos en Node (N-API)
      2. Interfaz C/C++ para módulos de alto rendimiento
      3. Compilación de addons para múltiples plataformas
      4. Gestión de memoria manual en addons
      5. Paso de buffers binarios entre JS y C++
      6. Seguridad y aislamiento al ejecutar código nativo
      7. Puentes con Rust (Neon, napi-rs)
      8. Puentes con Go (gobridge)
      9. Llamadas a librerías del sistema desde Node
      10. Consideraciones de portabilidad en binarios precompilados
      11. Versionado de ABI y compatibilidad
      12. Costos de cruce entre JS y nativo
      13. Exponer bindings tipados a TypeScript
      14. Depuración de código nativo integrado
      15. Distribución de módulos con binarios preconstruidos
    6. WebAssembly y Runtimes Aislados
      1. Compilación de código C/C++/Rust a WebAssembly
      2. Carga de módulos WASM en navegador
      3. Carga de módulos WASM en Node
      4. Memoria lineal compartida con WASM
      5. Paso de strings y arrays entre JS y WASM
      6. Ejecución de lógica crítica en WASM
      7. Aceleración de cómputo matemático
      8. WASM y sandboxing de seguridad
      9. Límites de llamadas frecuentes JS↔WASM
      10. Uso de WASI (interfaz de sistema para WASM)
      11. Ejecución en entornos serverless edge
      12. Reutilización de librerías nativas vía WASM
      13. Perfilado de rendimiento en WASM
      14. Integración con Web Workers para aislamiento
      15. Futuro de WASM en aplicaciones web complejas
    7. Estándares, Propuestas y Futuro del Lenguaje
      1. Proceso de propuesta TC39 (stages 0–4)
      2. Nuevas sintaxis del lenguaje
      3. Nuevas APIs estándar del runtime
      4. Decoradores estandarizados
      5. Records y Tuples inmutables (propuestas)
      6. Patrones de coincidencia estructural (pattern matching)
      7. Tipos sellados y exhaustividad
      8. Registros inmutables para datos seguros
      9. Tipos para excepciones y unknown seguro
      10. Campos privados # en clases
      11. Módulos nativos en el navegador sin bundler
      12. Evolución de import dinámico y lazy
      13. Nuevos primitivos de sincronización
      14. APIs criptográficas más ricas en WebCrypto
      15. Estandarización de APIs de streaming y backpressure
    8. Límites y Buenas Prácticas de Arquitectura
      1. Separación entre lógica de dominio y capas de infraestructura
      2. Evitar acoplamiento a frameworks
      3. Diseñar para testabilidad
      4. Manejo centralizado de configuración
      5. Manejo centralizado de errores
      6. Límite claro entre cliente y servidor
      7. Reutilización de tipos entre frontend y backend
      8. Versionado de contratos de API
      9. Estrategias de backward compatibility
      10. Limpieza de código muerto y flags experimentales
      11. Migraciones de datos controladas
      12. Monitoreo desde el inicio del proyecto
      13. Hardening de seguridad como requisito base
      14. Automatización de calidad en CI/CD
      15. Cultura de documentación viva y mantenible
Última modificación October 26, 2025: Changes (6094d13)