dangcuuson / graphql-schema-typescript

Generate TypeScript from GraphQL's schema type definitions
191 stars 36 forks source link

Types is overwriting instead merging #31

Open gabrielxavier-hotmart opened 5 years ago

gabrielxavier-hotmart commented 5 years ago

Hi,

I using grahpQL Modules and all my schema.graphql are separeted in modules. My problem is: I have one type in one module, after this, i declare this type again injecting other property. But when i generat the interfase only the last type is considered. Example

In Doctor Module: type Doctor { id: ID! name: String! birth: String }

In Specialty Module: type Doctor { specialties: [Specialty] }

Bu when i generate interfaces: export interface GQLDoctor { specialties?: Array<GQLSpecialty | null>; }

I use this function to merge schemas:

const genSchema = async () => {
    const schemas: GraphQLSchema[] = [];
    const folders = readdirSync(join(__dirname, "../modules")).filter(f => !f.includes("."));

    folders.forEach(folder => {
        const typeDefs = importSchema(join(__dirname, ../modules/${folder}/schema.graphql`));
        schemas.push(makeExecutableSchema({ typeDefs }));
    });
    await generateTypeScriptTypes(
        mergeSchemas({ schemas }),
        join(__dirname, "../types/schemas.d.ts")
    );
};
dangcuuson commented 4 years ago

Hi there,

Assume the mergeSchemas comes from graphql-tools, maybe you need to resolve type conflict

Alternately, instead of merging schema, you may consider extends your type instead

e.g: Add extends keyword in Specialty Module:

extends type Doctor {
  specialties: [Specialty]
}

And combine all your type defs into one schema only