Por que TypeScript é um must-have para o desenvolvedor moderno?
\nSe você abriu este artigo, significa que já sabe que TypeScript não é apenas uma "extensão do JavaScript", mas uma ferramenta completa que salva células nervosas e servidores de produção. Em entrevistas em 2025, o conhecimento de TypeScript é testado em quase 80% das vagas de nível middle+. E não se trata apenas de escrever const a: number = 5. Os entrevistadores querem ver compreensão do sistema de tipos, genéricos e capacidade de projetar uma arquitetura segura.
Neste artigo, abordaremos as perguntas mais frequentes em entrevistas de TypeScript que são realmente feitas nas melhores empresas. Você receberá não apenas teoria, mas também exemplos de código TypeScript que pode usar imediatamente em projetos pessoais. Vamos lá!
\n\n1. Base: tipos, interfaces e a diferença entre eles
\nO primeiro bloco de perguntas é fundamental. O entrevistador quer ter certeza de que você não confunde type e interface.
Quando usar type e quando usar interface?
\nPergunta clássica. Lembre-se da regra simples:
\n- \n
- Interface — para objetos que podem ser estendidos (declaration merging). Use para APIs, DTOs, props de componentes. \n
- Type — para uniões (
union), interseções, primitivos e tuplas. \n
Exemplo de uma entrevista real:
\n// Interface — extensível\ninterface User {\n id: number;\n name: string;\n}\n\ninterface AdminUser extends User {\n role: 'admin';\n}\n\n// Type — união\ntype Status = 'active' | 'inactive' | 'banned';\ntype ApiResponse<T> = {\n data: T;\n error?: string;\n};\nImportante: Nunca diga "interface é melhor porque é mais rápida". A diferença de desempenho é microscópica. O importante é a semântica.
\n\n2. Genéricos: como não passar vergonha na entrevista
\nO tópico de genéricos em TypeScript é o ponto fraco favorito dos juniores. Os entrevistadores adoram pedir para escrever uma função que recebe um array e retorna o primeiro elemento com o tipo correto.
\nEscrevendo uma função genérica
\nfunction getFirst<T>(arr: T[]): T | undefined {\n return arr[0];\n}\n\nconst num = getFirst([1, 2, 3]); // number\nconst str = getFirst(['a', 'b']); // string\nAgora vamos complicar — restringir o genérico com extends:
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {\n return obj[key];\n}\n\nconst user = { name: 'Alice', age: 30 };\ngetProperty(user, 'name'); // OK: string\ngetProperty(user, 'email'); // Erro: 'email' não está em keyof\nEsse padrão aparece em cada segundo projeto React + TypeScript. Pratique escrever genéricos para TypeScript em seus projetos.
\n\n3. Utility Types: seu arsenal secreto
\nConhecer os tipos utilitários embutidos é sinal de profissionalismo. O entrevistador pode perguntar: "Como tornar todos os campos opcionais?" ou "Como selecionar apenas parte de uma interface?".
\nTop 5 utility types que você precisa saber
\n- \n
Partial<T>— todos os campos se tornam opcionais; \n Required<T>— todos os campos são obrigatórios; \n Pick<T, K>— seleciona apenas as chaves especificadas; \n Omit<T, K>— exclui as chaves especificadas; \n Record<K, V>— cria um tipo de objeto com chaves K e valores V. \n
Exemplo que adoram dar em entrevistas:
\ninterface Todo {\n title: string;\n description: string;\n completed: boolean;\n createdAt: Date;\n}\n\n// Atualiza apenas parte do Todo\nfunction updateTodo(todo: Todo, fieldsToUpdate: Partial<Todo>) {\n return { ...todo, ...fieldsToUpdate };\n}\n\n// Cria um dicionário\nconst