danielroe / sanity-typed-queries

A typed, zero-dependency schema generator and query builder for Sanity.
MIT License
175 stars 6 forks source link

fix: possible circular reference when using custom types #109

Open waspeer opened 3 years ago

waspeer commented 3 years ago

🐛 The bug I'm working on a schema that contain section and page document types. A section contains an array of references to page and a page contains a reference to a section. When adding the custom types like described in the documentation the typechecking breaks (everything is infered as any). When I replace the custom type with a plain object like { _type: 'page' } the type inference (partly) works again, so this probably has to do with the fact that section and page reference each other causing it to break.

🛠ī¸ To reproduce Steps to reproduce the behavior:

  1. Create two documents with a reference field
  2. Reference the documents to each other.

For example: https://gist.github.com/waspeer/f831dbb06ea59f8f8ca04575e1962cf3 Here the type inference of the variables section, page and Rule fail.

ℹī¸ Additional context Thanks for you work on this library!

waspeer commented 3 years ago

I wanted to follow up immediately with some possible solutions.

  1. Generate types on runtime. You could generate a CustomType type which consists of all the documents / objects that were defined. An example of this would be @nexus/schema.
  2. Leave it to the user to create a CustomType type. A quick example I could think of would look like this:
    
    // builder.ts

type CustomType = 'section' | 'page';

const { defineDocument, defineObject } = createBuilder()

export { defineDocument, defineObject };