Open
Description
Describe the bug
When using the generate types feature for your Database (which is mostly great), if your column type is json
or jsonb
, the generated type it gives you is this:
export type Json = string | number | boolean | null | { [key: string]: Json | undefined } | Json[]
This type is incompatible with any type you try to use it for. For example, if I'm using a column to hold an ingredient (this is hypothetical):
export interface Ingredient {
id: number
name: string
quantity: string
}
const result: Json = { id: 1, name: 'Berries', quantity: '1 cup' } // this is how the object will be typed using the generated types
const ingredient: Ingredient = result // Type '{ [key: string]: Json | undefined; }' is missing the following properties from type 'Ingredient': id, name, quantity(2739)
const ingredient2: Ingredient = result as Ingredient
// above results in:
// Conversion of type '{ [key: string]: Json | undefined; }' to type 'Ingredient' may be a mistake because neither type sufficiently
// overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
I have more examples of this in the typescript playground below. Given how error-prone it is to add a type for JSON data, can you please consider using any
for Json types? We have to cast these values as any
anyway because you cannot cast the type you are using, as demonstrated above.
To Reproduce
You can see this behavior on this TypeScript playground link:
Desktop (please complete the following information):
- OS: macOS
- Browser: Chrome 120
- Version of CLI: 1.93.0
- Version of supabase-js: 2.38.0
- Version of Node.js: 20.5.1
Metadata
Metadata
Assignees
Labels
No labels