[toc]
#### 定义
Union Type
联合类型是抽象类型,只是简单的枚举其他对象类型,联合类型的值实际上是其包含的对象类型之一的值(其types属性对应的数组列表)
union type 是 GraphQL\Type\Definition\UnionType (或它的子类) 的实例,它的构造函数接收数组配制参数:
~~~
$searchResultType = new UnionType([
'name' => 'SearchResult',
'types' => [
MyTypes::story(),
MyTypes::user()
];
'resolveType' => function($value) {
if ($value->type === 'story') {
return MyTypes::story();
} else {
return MyTypes::user();
}
}
]);
~~~
这个例子使用内联样式定义联合类型,你同样可以使用继承的方式。
#### 配制选项
| 名称 | 类型 | 描述 |
| --- | --- | --- |
| name | `string` | `必填` union type 在Schema内的唯一名字 |
| types | `array` | 联合类型允许返回的对象类型 |
| description | `string` | 类型的纯文本描述(例如通过GraphQL自动生成文档) |
| resolveType | `callback` 返回对象类型实例 | **function($value, $context, GraphQL\Type\Definition\ResolveInfo $info)** 返回对象类型处理$value,返回的值只能是Types字段列出的对象类型 |
#### 实例
联合类型用于描述某个字段能够支持的所有返回类型以及具体请求真正的返回类型,例如一个表示宠物(可以是猫或狗)的联合类型。
~~~
$PetType = new UnionType({
name: 'Pet',
types: [$DogType, $CatType],
resolveType: function($value) {
if ($value instanceof Dog) {
return $DogType;
}
if ($value instanceof Cat) {
return $CatType;
}
}
});
~~~