O que é Type-fest e para que serve?
\n\nType-fest é uma coleção de tipos utilitários para TypeScript, criada pela comunidade Sindre Sorhus. Esta biblioteca fornece dezenas de tipos prontos que resolvem tarefas cotidianas no desenvolvimento com TypeScript: desde transformações simples (por exemplo, tornar todos os campos de um objeto opcionais) até tipos condicionais complexos (por exemplo, extrair o tipo de valor de uma Promise).
\n\nPara que serve esta biblioteca? TypeScript é uma linguagem poderosa, mas seus tipos embutidos (Partial, Required, Pick, Record) cobrem apenas cenários básicos. Em projetos reais, frequentemente são necessárias construções mais específicas: união profunda de objetos, tipos para trabalhar com JSON, tipagem estrita de constantes, extração de tipos de estruturas complexas, etc. Type-fest elimina a necessidade de escrever esses tipos manualmente, economizando tempo e reduzindo a probabilidade de erros.
\n\nA biblioteca é ativamente mantida, tem mais de 10.000 estrelas no GitHub e é usada em grandes projetos como Next.js, Vite e Expo.
\n\nInstalação
\n\nType-fest é um pacote npm que é instalado como dependência de desenvolvimento (já que os tipos não afetam o runtime).
\n\n# npm\nnpm install --save-dev type-fest\n\n# yarn\nyarn add --dev type-fest\n\n# pnpm\npnpm add --save-dev type-fest\n\nObservação: a biblioteca não é instalada via pip — ela é destinada exclusivamente para TypeScript/JavaScript.
\n\nInício rápido
\n\nApós a instalação, você pode importar qualquer tipo da biblioteca. Vamos ver um exemplo simples — o uso do tipo PartialDeep, que torna todos os campos de um objeto (incluindo os aninhados) opcionais.
import type { PartialDeep } from 'type-fest';\n\ninterface User {\n id: number;\n name: string;\n address: {\n city: string;\n zip: number;\n };\n}\n\n// O Partial comum torna opcionais apenas os campos do primeiro nível\ntype PartialUser = Partial<User>;\n// { id?: number; name?: string; address?: { city: string; zip: number; } }\n\n// PartialDeep torna opcionais todos os campos aninhados\ntype DeepPartialUser = PartialDeep<User>;\n// { id?: number; name?: string; address?: { city?: string; zip?: number; } }\n\nconst user: DeepPartialUser = {\n name: 'Alice',\n address: {\n city: 'Wonderland'\n // zip pode ser omitido\n }\n};\n\nComo você pode ver, PartialDeep percorre automaticamente todos os níveis de aninhamento — algo que você teria que escrever manualmente com tipos recursivos.
Principais métodos/tipos
\n\nVamos ver os 10 tipos mais úteis do Type-fest. Para cada um, são fornecidos descrição, parâmetros (se houver) e um exemplo funcional.
\n\n1. PartialDeep
\nO que faz: Torna todas as propriedades de um objeto (incluindo as aninhadas) opcionais. Percorre recursivamente todos os níveis.
\nParâmetros: Um obrigatório — o tipo do objeto.
\nimport type { PartialDeep } from 'type-fest';\n\ninterface Config {\n server: {\n host: string;\n port: number;\n };\n debug: boolean;\n}\n\ntype PartialConfig = PartialDeep<Config>;\n// {\n// server?: {\n// host?: string;\n// port?: number;\n// };\n// debug?: boolean;\n// }\n\nconst config: PartialConfig = {\n server: {\n host: 'localhost'\n // port não foi especificado — sem erro\n }\n};\n\n2. RequiredDeep
\nO que faz: Torna todas as propriedades de um objeto (incluindo as aninhadas) obrigatórias. O oposto de PartialDeep.
Parâmetros: Tipo do objeto.
\nimport type { RequiredDeep } from 'type-fest';\n\ninterface User {\n name?: string;\n address?: {\n city?: string;\n };\n}\n\ntype StrictUser = RequiredDeep<User>;\n// {\n// name: string;\n// address Também na biblioteca
Trabalhando com arquivos ZIP em Go: guia completo sobre o pacote archive/zip
Redis-rs para Rust: guia completo com exemplos
Autorização e Autenticação em TypeScript: Guia Completo