Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
368 views
in Technique[技术] by (71.8m points)

typescript - How do I write the graphql schema for this scenario? (Conditional fields)

I've simplified the example below to show the part that seems unclear (or maybe isn't possible with graphQL?). I have an array of messages, where each message 'type' can be 'text', 'image' etc. Depending on this, the other properties will be different - e.g. an 'image' will have a 'src' field whereas a 'text' message will have a 'content' field.

Is there a way to pass this info to a graphQL schema?

The equivalent typescript types for this would be:

enum MsgTypes {
  Text = 'TEXT',
  Image = 'IMAGE',
}

type Txt = {
    type: MsgTypes.Text;
    content: string;
};

type Img = {
  type: MsgTypes.Image;
  src: string;
};

type Message = Txt | Img;

type Chatroom = {
    createdAt: Date;
    messages: Message[];
};

Best attempt at a graphQL schema equivalent:

enum MessageType {
    TEXT
    IMAGE
}

type Txt {
  # The problem with the below is that it would allow 'IMAGE'
  type: MessageType!
    content: String!
}

type Img {
    # The problem with the below is that it would allow 'TEXT'
    type: MessageType!
    src: String!
}

union Message = Txt | Img

type Chatroom {
    createdAt: Date!
    messages: [Message!]!
}

Any pointers or feedback on the graphQL schema attempt above (noob trying to learn this) much appreciated. Thank you.

question from:https://stackoverflow.com/questions/66056624/how-do-i-write-the-graphql-schema-for-this-scenario-conditional-fields

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...