danielroe/sanity-typed-queries

fix: possible circular reference when using custom types

waspeer opened this issue ยท 1 comments

๐Ÿ› 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!

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<CustomType>()

export { defineDocument, defineObject };