I think if you expect to be using discriminated union types, then you will get better behavior if your user-defined type guard returns a type like val is Extract<DiscriminatedUnionType, {discriminant: LiteralDiscriminant}> instead of intersections like val is DiscriminatedUnionType & {discriminant: LiteralDiscriminant} (or the one with Omit<DiscriminatedUnionType , "discriminant"> & {discriminant:
![How can I write general TypeGuard for GraphQL unions?](https://cdn-ak-scissors.b.st-hatena.com/image/square/98d6f053a97a87156775f60757c60865d0f2c47d/height=288;version=1;width=512/https%3A%2F%2Fcdn.sstatic.net%2FSites%2Fstackoverflow%2FImg%2Fapple-touch-icon%402.png%3Fv%3D73d79a89bded)