Back

Uso de es-toolkit para utilidades cotidianas de JavaScript

Uso de es-toolkit para utilidades cotidianas de JavaScript

Si has recurrido a Lodash para aplicar debounce a un input, dividir un array en chunks o seleccionar claves de un objeto, ya conoces el valor de una librería de utilidades de JavaScript bien diseñada. La pregunta que merece la pena hacerse hoy es si Lodash sigue siendo la opción por defecto adecuada, o si una alternativa más ligera encaja mejor en proyectos modernos basados en TypeScript y ESM.

es-toolkit es una librería de utilidades de JavaScript con mantenimiento activo, construida desde cero pensando en TypeScript, ESM y las APIs modernas de JavaScript. Cubre las funciones auxiliares que los desarrolladores frontend utilizan con más frecuencia, y lo hace con una huella notablemente menor que Lodash.

Puntos clave

  • es-toolkit es una librería de utilidades moderna y orientada a TypeScript que incluye sus propias definiciones de tipos y soporta tree-shaking limpio de forma nativa.
  • Está lista para producción, con adopción por parte de Storybook, Recharts y CKEditor, además de una recomendación oficial de Nuxt.
  • El tamaño del bundle puede ser significativamente menor que el de Lodash, lo que la hace muy adecuada para JavaScript del lado del cliente, donde el tiempo de carga importa.
  • Una capa de compatibilidad (es-toolkit/compat) facilita la migración desde Lodash, aunque el paquete estándar es la mejor opción a largo plazo.

¿Qué es es-toolkit y por qué importa?

es-toolkit es una librería moderna de utilidades de JavaScript que proporciona implementaciones tipadas y compatibles con tree-shaking de funciones auxiliares comunes. Está escrita íntegramente en TypeScript, incluye sus propias definiciones de tipos y no requiere un paquete @types/ adicional.

Como se indica en la documentación de es-toolkit, la librería ya es utilizada por proyectos y ecosistemas como Storybook, Recharts, CKEditor, Material UI y Nuxt. Ese nivel de adopción es un buen indicador de que el proyecto se mantiene activamente y es apto para uso en producción.

La librería está organizada en categorías claras —utilidades para arrays, objetos, funciones, strings, matemáticas y operaciones asíncronas—, cada una en su propio módulo. Esa estructura facilita el tree-shaking con cualquier bundler moderno.

Funciones auxiliares cotidianas, cubiertas

Aquí tienes una mirada práctica al tipo de utilidades que es-toolkit maneja bien:

Utilidades para arrays

import { chunk, groupBy, uniq, difference } from 'es-toolkit';

chunk([1, 2, 3, 4, 5], 2);                          // [[1, 2], [3, 4], [5]]
groupBy(['one', 'two', 'three'], (s) => s.length);  // { 3: ['one', 'two'], 5: ['three'] }
uniq([1, 2, 2, 3]);                                 // [1, 2, 3]
difference([1, 2, 3], [2, 3]);                      // [1]

Utilidades para objetos

import { pick, omit, mapValues } from 'es-toolkit';

pick({ a: 1, b: 2, c: 3 }, ['a', 'c']);    // { a: 1, c: 3 }
omit({ a: 1, b: 2, c: 3 }, ['b']);         // { a: 1, c: 3 }
mapValues({ a: 1, b: 2 }, (v) => v * 2);   // { a: 2, b: 4 }

Utilidades para funciones

import { debounce, throttle, once } from 'es-toolkit';

const handleSearch = debounce((query: string) => fetchResults(query), 300);
const handleScroll = throttle(() => updatePosition(), 100);
const initialize = once(() => setupApp());

Comprobaciones de null y type guards

import { isNotNil } from 'es-toolkit';

const values = [1, null, 2, undefined, 3];
values.filter(isNotNil); // [1, 2, 3] — tipado como number[]

TypeScript infiere correctamente el tipo refinado aquí, algo que requiere más esfuerzo manual con Lodash y @types/lodash.

Tamaño del bundle: una diferencia práctica

Cuando importas una sola función de es-toolkit en un proyecto Vite, solo se incluye en el bundle el código de esa función. Dependiendo de la utilidad, el tamaño añadido al bundle puede ser extremadamente pequeño en comparación con los imports equivalentes de Lodash.

La diferencia es más visible cuando importas desde el paquete lodash completo sin tree-shaking, lo que puede añadir más de 20 kB comprimidos.

La diferencia importa especialmente para el JavaScript del lado del cliente, donde el tamaño del bundle afecta directamente al tiempo de carga y a las Core Web Vitals.

Migración desde Lodash

Si estás migrando un código base existente, es-toolkit proporciona una capa de compatibilidad:

// Antes
import _ from 'lodash';

// Después (modo compatibilidad)
import _ from 'es-toolkit/compat';

es-toolkit/compat se prueba contra el propio test suite de Lodash y busca compatibilidad total con Lodash. Dicho esto, el paquete estándar es-toolkit es la mejor opción a largo plazo: es más pequeño, más rápido y los tipos de TypeScript son más estrictos.

El paquete estándar también tiene una superficie de API más reducida y moderna que Lodash, por lo que sigue siendo buena idea revisar la documentación oficial antes de migraciones grandes.

Cuándo tiene sentido usar es-toolkit

Usa es-toolkit cuando:

  • Estés iniciando un nuevo proyecto en TypeScript o ESM y quieras utilidades tipadas sin una dependencia pesada.
  • El tamaño del bundle sea una preocupación y desees un tree-shaking limpio.
  • Necesites helpers asíncronos modernos como delay con soporte para AbortController.
  • Quieras tipos integrados sin instalar un paquete @types/ adicional.

Continúa con Lodash (o JavaScript nativo) cuando:

  • Tengas un código base extenso que ya use Lodash y el coste de migración supere el beneficio.
  • Dependas de patrones específicos de Lodash en una aplicación antigua.
  • Tu entorno de ejecución sea anterior al tooling moderno de JavaScript.

Conclusión

es-toolkit es una alternativa a Lodash práctica y bien mantenida para proyectos modernos de JavaScript y TypeScript. No reemplazará todos los flujos de trabajo de Lodash de inmediato, pero para proyectos nuevos —o cualquier código base donde el tamaño del bundle y la seguridad de tipos importen— vale la pena considerarla como librería de utilidades por defecto.

Preguntas frecuentes

No del todo. El paquete estándar de es-toolkit tiene tipos más estrictos y una superficie más reducida que Lodash, por lo que algunas firmas de funciones difieren. Para facilitar la migración, el módulo es-toolkit/compat replica la API de Lodash y se prueba contra el propio test suite de Lodash. La mayoría de los proyectos pueden migrar gradualmente comenzando por compat y cambiando al paquete estándar con el tiempo.

Funciona en ambos. es-toolkit se ejecuta en entornos modernos de Node.js, navegadores, Deno y Bun, y se integra de forma limpia con bundlers de frontend como Vite, webpack y Rollup.

A menudo, sí, especialmente si tu uso actual de Lodash importa desde el paquete raíz. es-toolkit está diseñado para tree-shaking moderno y muchas utilidades añaden muy poco a un bundle de producción. Las diferencias exactas en el tamaño del bundle dependen de las funciones que importes y de cómo se empaquete tu aplicación.

No. es-toolkit está escrito en TypeScript e incluye sus propias definiciones de tipos, por lo que no es necesario instalar un paquete @types/ adicional. La inferencia de tipos también suele ser más precisa que la de Lodash con @types/lodash, particularmente para type guards como isNotNil y helpers genéricos como pick y omit.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay