linguagem
TypeScript
TypeScript em entrevista testa se você usa o sistema de tipos para modelar o domínio ou só para calar o compilador. Union types, generics e narrowing aparecem o tempo todo — geralmente aplicados a um problema real de modelagem.
Simulador de TypeScript
Tópicos por senioridade
Desafios práticos
Cenários reais pra resolver em voz alta, como numa entrevista de verdade — não é múltipla escolha.
- Cenário: tipar um componente Select genérico
Você precisa criar um componente `<Select>` reutilizável que funcione tipado para qualquer lista de opções (strings, números, objetos). Como modelaria os tipos com generics?
Perguntas mais cobradas
ver todas →- Difícil
Cenário: tipar um componente Select genérico
Um componente genérico `<T>` com `options: T[]`, deixando o TypeScript inferir T a partir do array passado.
- Médio
`any` x `unknown` x `never`
`any`: desliga o checador (contagioso). `unknown`: aceita tudo mas exige estreitar antes de usar (ideal pra entrada não confiável). `never`: tipo vazio, retorno de quem sempre lança / ramo impossível.
- Médio
Narrowing e type guards
Narrowing: o compilador estreita o tipo por `typeof`/`in`/`instanceof`/discriminante. Type guard: função `(v): v is T` cujo `if` estreita `v` pra `T`. O corpo tem que checar de verdade.
- Fácil
Tipos utilitários e o valor de derivar tipos
Partial (tudo opcional), Pick/Omit (subconjunto de chaves), Record<K,V> (mapa), ReturnType (tipo de retorno). Derivar dá fonte única da verdade — redigitar diverge no primeiro refactor.
- Difícil
Tipagem estrutural (duck typing) x nominal
Compatível = mesma forma, não mesma declaração (duck typing). Morde quando tipos de mesma forma e sentidos diferentes (UserId x OrderId) se misturam — resolve com branded types.
- Médio
Generics com `extends` (constraints)
`<T extends X>` restringe T a tipos que satisfazem X, liberando acesso seguro ao que X garante. Ex: `K extends keyof T` faz `pluck(obj, chave)` só aceitar chaves reais e retornar `T[K]` exato.
- Médio
Uniões discriminadas e exaustividade
Variantes com uma propriedade literal comum (a tag) que o compilador usa pra estreitar num `switch`. Exaustividade: `default` com `const _: never = valor` — variante nova não tratada vira erro de compilação.
- Fácil
O que `strict: true` liga, e por que vale a pena
Liga strictNullChecks (o principal — null/undefined não são mais universais), noImplicitAny, strictPropertyInitialization e outros. Vale porque o bug nº 1 (undefined) só é pego com strictNullChecks.