Type-fest para TypeScript: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é Type-fest e para que serve?

\n\n

Type-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\n

Para 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\n

A biblioteca é ativamente mantida, tem mais de 10.000 estrelas no GitHub e é usada em grandes projetos como Next.js, Vite e Expo.

\n\n

Instalação

\n\n

Type-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\n

Observação: a biblioteca não é instalada via pip — ela é destinada exclusivamente para TypeScript/JavaScript.

\n\n

Início rápido

\n\n

Apó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.

\n\n
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\n

Como você pode ver, PartialDeep percorre automaticamente todos os níveis de aninhamento — algo que você teria que escrever manualmente com tipos recursivos.

\n\n

Principais métodos/tipos

\n\n

Vamos 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\n

1. PartialDeep

\n

O que faz: Torna todas as propriedades de um objeto (incluindo as aninhadas) opcionais. Percorre recursivamente todos os níveis.

\n

Parâmetros: Um obrigatório — o tipo do objeto.

\n
import 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\n

2. RequiredDeep

\n

O que faz: Torna todas as propriedades de um objeto (incluindo as aninhadas) obrigatórias. O oposto de PartialDeep.

\n

Parâmetros: Tipo do objeto.

\n
import 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                    

Recommendations