A union type represents a set of object types. It is very similar to an interface, except that there is no requirement for common fields between the specified types.
SDL
type TextContent {  text: String!}
type ImageContent {  imageUrl: String!  height: Int!}
union PostContent = TextContent | ImageContent
Clients can query fields returning a union like the following.
GraphQL
{  content {    ... on TextContent {      text    }    ... on ImageContent {      imageUrl    }  }}
Learn more about unions here.
Usage
Unions can be defined like the following.
We can use a marker interface (or an abstract class) to define object types as part of a union.
C#
[UnionType("PostContent")]public interface IPostContent{}
public class TextContent : IPostContent{    public string Text { get; set; }}
public class ImageContent : IPostContent{    public string ImageUrl { get; set; }
    public int Height { get; set; }}
public class Query{    public IPostContent GetContent()    {        // Omitted code for brevity    }}
C#
builder.Services    .AddGraphQLServer()    .AddQueryType<Query>()    .AddType<TextContent>()    .AddType<ImageContent>();