我读过这篇伟大的要点 - GraphQLInterfaceType
但仍有一些困惑:
ES6 classes
?
ES6 classes
和等量的GraphQL types
。resolveType
功能时如何正确处理isTypeOf
和interfaces
?ES6 classes
定义了所有GraphQL types
,但原始数据是在不同的地方构建的,使用不同的技术,如grpc+protobuf
,这与这些类定义没有任何关系,那么isTypeOf: (value) => value instanceof Dog
如何在这里工作?答案 0 :(得分:3)
resolveType
和isTypeOf
的实施非常灵活,原因如下:它非常适合特定应用。它取决于数据库,数据模型,类型类型,等等。某些后端可能为其所有模型分别具有单独的ES6类,尤其是在使用ORM时,在查询数据库时它会创建这些类的实例。但是ORM不是必需的。并且您不应该被要求实例化任何其他类以找出GraphQL类型。
在某些情况下,您只能从对象的属性中确定类型。如果您的应用不是这种情况,那么您可以采取一些措施来提供提示。这是一个SQL示例。
SELECT
id,
body,
author_id,
post_id,
'Comment' AS "$type" -- leave a hint to resolve the type
FROM comments
UNION
SELECT
id,
body,
author_id,
NULL AS post_id,
'Post' AS "$type" -- leave a hint to resolve the type
FROM posts
此查询提供了一个"类型提示",一个额外的计算列,因此实现resolveType
是一个简单的属性查找。其他DBMS可以使用类似的策略。