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