Вот мои typedefs:
interface BaseTopic {
id: ID!
title: String!
}
type BaseTopicWithAuthor implements BaseTopic {
id: ID!
title: String!
author: BaseUser!
}
type Topic implements BaseTopic {
id: ID!
title: String!
author_id: ID!
content: String!
reply_count: Int
visit_count: Int
create_at: String
author: BaseUser!
}
type TopicDetail implements BaseTopic {
id: ID!
author_id: ID!
content: String!
title: String!
reply_count: Int
visit_count: Int
create_at: String
author: BaseUser!
replies: [Reply]!
is_collect: Boolean
}
Проблема в том, что большинство полей одинаковы для Topic
типа объекта и TopicDetail
типа объекта. Слишком многословно писать одни и те же поля несколько раз. Что, если есть еще «Topi c» с несколькими различными полями, я должен снова написать эти же поля (id
, title
, author_id
, content
, et c ...) и снова и добавьте одно другое поле для нового * Topic
типа объекта. Например,
type TopicNew implements BaseTopic {
# I have to write below fields which same with Topic and TopicDetail object types again.
# It's too verbose.
id: ID!
author_id: ID!
content: String!
title: String!
reply_count: Int
visit_count: Int
create_at: String
author: BaseUser!
# add a new different field
newField: String
}
Я прочитал этот пост: Как наследовать или расширять typeDef в GraphQL
Таким образом, для сокращения дублирующихся полей, единственный выбор - использовать graphql-s2s пакет?
Я знаю, что могу определить некоторые общие определения типа строки и использовать его как
type Topic implements BaseTopic {
${commonFields}
author: BaseUser!
}
type TopicDetail implements BaseTopic {
${commonFields}
author: BaseUser!
replies: [Reply]!
is_collect: Boolean
}
Но это слишком уродливо и не совсем в графическом стиле. Это JS языковой способ с использованием литералов шаблона . Поддерживает ли graphql SDL какой-либо способ справиться с этим сценарием?