本文整理汇总了TypeScript中graphql.GraphQLSchema.getPossibleTypes方法的典型用法代码示例。如果您正苦于以下问题:TypeScript GraphQLSchema.getPossibleTypes方法的具体用法?TypeScript GraphQLSchema.getPossibleTypes怎么用?TypeScript GraphQLSchema.getPossibleTypes使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类graphql.GraphQLSchema
的用法示例。
在下文中一共展示了GraphQLSchema.getPossibleTypes方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1:
Object.keys(typeMap).forEach(typeName => {
const type = typeMap[typeName];
if (isAbstractType(type)) {
const targetType = targetSchema.getType(typeName);
if (!isAbstractType(targetType)) {
const implementations = transformedSchema.getPossibleTypes(type) || [];
mapping[typeName] = implementations
.filter(impl => targetSchema.getType(impl.name))
.map(impl => impl.name);
}
}
});
示例2: getField
const getChildSelections: GetChildSelectionsType = (operation, selection, parent?, isUndefined = false): IChildSelection => {
let str: string = '';
let isFragment: boolean = false;
let isPartial: boolean = false;
let complexTypes: IComplexTypeSignature[] = [];
if (selection.kind === 'Field') {
const field: GraphQLField<any, any> = getField(operation, selection, parent);
const originalName: string = selection.name.value;
const selectionName: string = selection.alias ? selection.alias.value : originalName;
let childType: string | undefined;
isUndefined = isUndefined || isUndefinedFromDirective(selection.directives);
let resolvedType: string;
if (originalName === '__typename') {
if (!parent) {
resolvedType = TypeMap.String;
} else if (isAbstractType(parent)) {
const possibleTypes: GraphQLObjectType[] = parsedSchema.getPossibleTypes(parent);
/**
* @TODO break this OR logic out of here (and the other places) and put into a printer
* @TODO break out the string-literal type out of here as it probably isn't supported by other languages
*/
resolvedType = possibleTypes.map(({ name }) => `'${name}'`).join(' | ');
} else {
resolvedType = `'${parent.toString()}'`;
}
} else if (!!selection.selectionSet) {
let newParent: GraphQLCompositeType | undefined;
const fieldType: GraphQLNamedType = rootIntrospectionTypes.has(originalName) ? parsedSchema.getType(
rootIntrospectionTypes.get(originalName)!
) : getNamedType(field.type);
if (isCompositeType(fieldType)) {
newParent = fieldType;
}
const selections: IChildSelection[] =
selection.selectionSet.selections.map(sel => getChildSelections(operation, sel, newParent));
const nonFragments: IChildSelection[] = selections.filter(s => !s.isFragment);
const fragments: IChildSelection[] = selections.filter(s => s.isFragment);
const andOps: string[] = [];
complexTypes.push(...flattenComplexTypes(selections));
if (nonFragments.length) {
const nonPartialNonFragments: IChildSelection[] = nonFragments.filter(nf => !nf.isPartial);
const partialNonFragments: IChildSelection[] = nonFragments.filter(nf => nf.isPartial);
if (nonPartialNonFragments.length) {
const interfaceDeclaration: string = generateInterfaceDeclaration(nonPartialNonFragments.map(f => f.iface));
const subtypeInfo: ISubtypeMetadata | null = getSubtype(selection, interfaceDeclaration, generateSubTypeInterfaceName);
const newInterfaceName: string | null = subtypeInfo ? subtypeInfo.name : null;
andOps.push(newInterfaceName || interfaceDeclaration);
if (newInterfaceName && subtypeInfo && !subtypeInfo.dupe) {
complexTypes.push({ iface: interfaceDeclaration, isPartial: false, name: newInterfaceName });
}
}
if (partialNonFragments.length) {
const interfaceDeclaration: string =
wrapPartial(generateInterfaceDeclaration(partialNonFragments.map(f => f.iface)));
const subtypeInfo: ISubtypeMetadata | null = getSubtype(selection, interfaceDeclaration, generateSubTypeInterfaceName);
const newInterfaceName: string | null = subtypeInfo ? subtypeInfo.name : null;
andOps.push(newInterfaceName || interfaceDeclaration);
if (newInterfaceName && subtypeInfo && !subtypeInfo.dupe) {
complexTypes.push({ iface: interfaceDeclaration, isPartial: true, name: newInterfaceName });
}
}
}
andOps.push(...fragments.map(wrapPossiblePartial));
childType = typeJoiner(andOps);
resolvedType = convertToType(field ? field.type : fieldType, false, childType);
} else {
resolvedType = convertToType(field.type, false, childType);
}
str = formatInput(selectionName, isUndefined, resolvedType);
} else if (selection.kind === 'FragmentSpread') {
str = generateFragmentName(selection.name.value);
isFragment = true;
isPartial = isUndefinedFromDirective(selection.directives);
} else if (selection.kind === 'InlineFragment') {
const anon: boolean = !selection.typeCondition;
let fragName: string = '';
if (!anon && selection.typeCondition) {
const typeName: string = selection.typeCondition.name.value;
parent = parsedSchema.getType(typeName);
isFragment = true;
fragName = generateFragmentName(`SpreadOn${typeName}`);
}
const selections: IChildSelection[] =
selection.selectionSet.selections.map(sel => getChildSelections(operation, sel, parent, false));
const fragmentSelections: IChildSelection[] = selections.filter(({ isFragment: frag }) => frag);
const nonFragmentSelections: IChildSelection[] = selections.filter(({ isFragment: frag }) => !frag);
/**
* @TODO need to handle fragments of fragments better
//.........这里部分代码省略.........