prismake / typegql

Create GraphQL schema with TypeScript classes.
https://prismake.github.io/typegql/
MIT License
424 stars 21 forks source link

Any plans for adding interface support? #11

Open ruhnowg opened 6 years ago

ruhnowg commented 6 years ago

Do you currently have any plans for adding support for GraphQLInterfaceType?

pie6k commented 6 years ago

I'll add such support hopefully this or next week.

lorefnon commented 6 years ago

I have a suggestion for this but that may entail a breaking change:

const IPerson = InterfaceType("IPerson", { ... })
const Person = ObjectType({ ... }) // Or ObjectType("Person", { ... })

@IPerson.Type()
@Person.Type()
class Person  {

    @IPerson.Field()
    @Person.Field()
    name: string;

    @Person.Field({type: GraphQLDate})
    dob: Date

    @IPerson.Field()
    @Person.Field()
    age() {
         return moment(this.dob).diff(moment(), 'year');
    }
}

This allows using the same implementation as a basis for multiple Object types, interface types or input types.

When implementing just an object type, this verbosity can be reduced by destructuring:

const {Type, Field} = ObjectType({... });

@Type()
class Person {
    @Field() 
    name: string;

    // ....
}

Let me know what you think.