[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;
}
}
});
~~~