Biblioteca remeda para TypeScript: Guia Completo
No desenvolvimento web moderno com TypeScript, manipular dados é uma das tarefas mais comuns. A biblioteca remeda (anteriormente conhecida como Remeda) é uma alternativa moderna e type-safe ao Lodash, projetada especificamente para TypeScript. Neste artigo, vamos explorar o que é remeda, como instalá-la, quais métodos ela oferece e como usá-la em projetos reais.
1. O que é e por que usar
Remeda é uma biblioteca de utilitários para programação funcional em TypeScript. Diferente do Lodash, que foi originalmente escrito para JavaScript e só depois recebeu tipos, a remeda foi projetada desde o início com tipagem estrita em mente. Isso significa que todas as funções são totalmente type-safe: o compilador TypeScript pode inferir tipos precisos de entrada e saída, reduzindo significativamente erros em tempo de execução.
Por que usar remeda? Primeiro, ela oferece funções convenientes para trabalhar com arrays, objetos, strings e outras estruturas de dados usadas no dia a dia. Segundo, remeda incentiva o estilo funcional de programação: a maioria das funções são puras, não mutam os dados originais e podem ser facilmente combinadas com pipes. Terceiro, remeda é extremamente leve (tree-shakeable), permitindo incluir no bundle apenas as funções realmente utilizadas.
Principais vantagens da remeda sobre o Lodash: suporte completo a TypeScript "de fábrica", imutabilidade por padrão, suporte a pipes para composição de funções e uma API mais moderna, alinhada aos padrões ES6+.
2. Instalação
A remeda é distribuída via npm. Para instalá-la, execute o comando:
npm install remeda
Ou, se você usa yarn:
yarn add remeda
Após a instalação, você pode importar funções individualmente (recomendado para tree-shaking) ou o módulo inteiro:
// Importando funções individuais (recomendado)
import { pipe, map, filter } from 'remeda';
// Importando o módulo completo
import * as R from 'remeda';
3. Primeiros passos — exemplo mínimo funcional
Vamos criar um exemplo simples: temos um array de números, queremos filtrar os pares, multiplicar cada um por 2 e exibir o resultado.
import { pipe, filter, map } from 'remeda';
const numbers = [1, 2, 3, 4, 5, 6];
const result = pipe(
numbers,
filter(x => x % 2 === 0), // [2, 4, 6]
map(x => x * 2) // [4, 8, 12]
);
console.log(result); // [4, 8, 12]
Perceba como o código é lido como uma sequência de operações: "pegar numbers, filtrar os pares, depois multiplicar por 2". Essa é a essência da abordagem funcional promovida pela remeda.
4. Principais métodos/funções
Vamos explorar 8 funções essenciais da remeda. Para cada uma, mostramos a assinatura, uma breve descrição e um exemplo.
4.1. pipe
Assinatura: pipe<A, B, C, ...>(value: A, ...fns: Function[]): LastReturnType
O que faz: Recebe um valor inicial e uma lista de funções. Aplica cada função sequencialmente ao resultado da anterior. É a principal forma de composição na remeda.
import { pipe } from 'remeda';
const addOne = (x: number) => x + 1;
const double = (x: number) => x * 2;
const result = pipe(5, addOne, double); // (5 + 1) * 2 = 12
console.log(result); // 12
4.2. map
Assinatura: map<T, R>(fn: (value: T, index: number, array: T[]) => R): (array: T[]) => R[]
Também na biblioteca
ORM para C++: comparação e exemplos de uso (ODB, SOCI, SQLiteCpp)
Redis-rs para Rust: guia completo com exemplos
Cliente OAuth para Java: visão geral das bibliotecas e exemplos de código
mo para Go: guia completo com exemplos práticos