sanity-codegen icon indicating copy to clipboard operation
sanity-codegen copied to clipboard

[v1][codegen] Reference fields are typed as `any`

Open ochicf opened this issue 1 year ago • 0 comments

Generated types for reference fields result in that field being any. This is caused because the Sanity.Reference<...> type is used, which is any.

Example:

/// <reference types="@sanity-codegen/types" />

namespace Sanity.MyNamespace.Schema {
  type MyType =
  | {
      _id: string;
      _type: "myType";
      myReferenceField?: Sanity.Reference<Sanity.Ref.Ref_1234>;
                                // ^? type Sanity.Reference = /*unresolved*/ any 

    }
    | undefined;
}

Manually adding the following code at the top of the generated types fixes the issue, so I guess this should be generated aswell by the codegen:

namespace Sanity {
  type Reference<T> = T | {
    _type: string
    _ref: string
    _key?: string
    _weak?: boolean
    _strengthenOnPublish?: {
      type: string
      weak?: boolean
      template?: {
        id: string
        params: Record<string, string | number | boolean>
      }
    }
  };
}

Note that I copied the object reference definition from @sanity/types, so maybe it could be used from there?


EDIT: I just realised all those types are already defined in @sanity-codegen/types and I didn't have it installed where I'm using the generated schemas (I'm in a monorepo with project+studio). After installing it's still not picking them up, will continue investigating.

ochicf avatar May 25 '23 17:05 ochicf