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?
Carregando comentários...