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 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…