From a08cf5d7029d149a74a2f731c3d3180572fac94b Mon Sep 17 00:00:00 2001 From: Ivan Goncharov Date: Sun, 26 Jan 2020 22:34:44 +0800 Subject: [PATCH] FieldsOnCorrectTypeRule: improve type coverage --- src/polyfills/arrayFrom.js | 2 ++ src/validation/rules/FieldsOnCorrectTypeRule.js | 10 +++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/polyfills/arrayFrom.js b/src/polyfills/arrayFrom.js index 40bff3a13d..ab7ad40200 100644 --- a/src/polyfills/arrayFrom.js +++ b/src/polyfills/arrayFrom.js @@ -2,6 +2,8 @@ import { SYMBOL_ITERATOR } from './symbols'; +declare function arrayFrom(arrayLike: Iterable): Array; +// eslint-disable-next-line no-redeclare declare function arrayFrom( arrayLike: mixed, mapFn?: (elem: mixed, index: number) => T, diff --git a/src/validation/rules/FieldsOnCorrectTypeRule.js b/src/validation/rules/FieldsOnCorrectTypeRule.js index 570be594a4..d51b5e4a31 100644 --- a/src/validation/rules/FieldsOnCorrectTypeRule.js +++ b/src/validation/rules/FieldsOnCorrectTypeRule.js @@ -13,6 +13,8 @@ import { type ASTVisitor } from '../../language/visitor'; import { type GraphQLSchema } from '../../type/schema'; import { type GraphQLOutputType, + type GraphQLObjectType, + type GraphQLInterfaceType, isObjectType, isInterfaceType, isAbstractType, @@ -79,7 +81,9 @@ function getSuggestedTypeNames( return []; } - const suggestedTypes = new Set(); + const suggestedTypes: Set< + GraphQLObjectType | GraphQLInterfaceType, + > = new Set(); const usageCount = Object.create(null); for (const possibleType of schema.getPossibleTypes(type)) { if (!possibleType.getFields()[fieldName]) { @@ -111,10 +115,10 @@ function getSuggestedTypeNames( } // Suggest super types first followed by subtypes - if (isAbstractType(typeA) && schema.isSubType(typeA, typeB)) { + if (isInterfaceType(typeA) && schema.isSubType(typeA, typeB)) { return -1; } - if (isAbstractType(typeB) && schema.isSubType(typeB, typeA)) { + if (isInterfaceType(typeB) && schema.isSubType(typeB, typeA)) { return 1; }