当前位置: 首页>>代码示例>>TypeScript>>正文


TypeScript GraphQLSchema.getPossibleTypes方法代码示例

本文整理汇总了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);
     }
   }
 });
开发者ID:apollostack,项目名称:graphql-tools,代码行数:12,代码来源:ExpandAbstractTypes.ts

示例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
//.........这里部分代码省略.........
开发者ID:avantcredit,项目名称:gql2ts,代码行数:101,代码来源:index.ts


注:本文中的graphql.GraphQLSchema.getPossibleTypes方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。