Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.

No TypeScript, usar união discriminada com tipos genéricos às vezes dá dor de cabeça. O problema é que, ao tentar fazer uma checagem de tipo usando a propriedade discriminadora, o compilador nem sempre consegue inferir o tipo correto dentro do bloco de código. Isso acontece porque o tipo genérico não consegue se comportar como uma união discriminada padrão.
Por exemplo, imagine duas interfaces com uma propriedade 'type' diferenciada: Foo e Bar. Quando encapsulamos esses tipos dentro de um genérico, como GenericThing<T>, a checagem de genericThing.item.type pode não fazer o TypeScript entender que o item é de um tipo específico. Isso limita o uso de union discrimination. A decisão fica mais saudável quando o time consegue medir o impacto depois.
A saída aqui é que, para aproveitar ao máximo as checagens de tipo, muitas vezes é melhor evitar usar tipos genéricos nesse cenário ou criar uma estrutura que permita a inferência mais clara. Alternativamente, usar sobrecarga de funções ou tipos condicionais pode ajudar a manter a segurança de tipos. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Na prática, é importante avaliar se o uso de genéricos nesse contexto agrega valor ou só complica a inferência de tipos. Para quem trabalha com schemas dinâmicos e precisa de discriminação clara, talvez seja melhor evitar combinações complexas ou criar mecanismos de validação específicos. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
O que vocês têm visto na prática ao lidar com union discrimination em tipos genéricos? Alguma dica que já ajudou a resolver esses limites de inferência?
Eu já passei por isso e, na minha experiência, criar tipos específicos para cada caso ajuda bastante. Quando uso genérico, às vezes fico na dúvida se o tipo foi inferido corretamente.
A questão do tipo genérico realmente trava na hora de fazer checagem, acho que uma solução pode ser usar tipos condicionais ao invés de genéricos, assim a inferência fica mais clara.
Concordo, Gabriela. Pra mim, o segredo é evitar sobrecarregar o genérico com muitas regras. Melhor separar as interfaces e usar union na hora certa.
Exato, Felipe. No meu time, a gente prefere fazer a checagem direto na união, sem passar por genéricos complicados. Assim, o TypeScript consegue entender melhor o que está acontecendo.