sanity-codegen
sanity-codegen copied to clipboard
[v1][codegen] Reference fields are typed as `any`
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.