Coder Social home page Coder Social logo

Comments (6)

inorganik avatar inorganik commented on August 26, 2024 3

I agree, I think it would be more productive to use unknown and remove the Json type entirely. Then we can cast freely and not violate any ESLint rules.

from postgres-meta.

sweatybridge avatar sweatybridge commented on August 26, 2024

We probably want to type this as generics here, ie.

export type Json<T=void> = string | number | boolean | null | T | T[]

I will transfer this to postgres-meta repo as it's a feature for the types generator.

from postgres-meta.

inorganik avatar inorganik commented on August 26, 2024

Thanks, can you please link to where you moved it?

from postgres-meta.

isaacharrisholt avatar isaacharrisholt commented on August 26, 2024

@sweatybridge from my experimentation, using generics wouldn't make any difference, since the type in the exported interface would need to either be Json using the default type parameter, or would need to be instantiated with some fixed type parameter.

x: Json
y: Json<SomeFixedTypeParam>

Alternatively we make the Database type a generic type, but that's not suitable, and would force all Json types within to take on the same type anyway.


@inorganik the problem with using something like any or even doing something like:

export type Json<T = Record<string, any>> = string | number | boolean | null | T | Json<T>[]

is that it would likely break many people's builds, as a lot of projects will have the no-explicit-any rule enabled in eslint.

We could add an ignore at the top of the file, but that doesn't solve the problem for anyone - some people use other linters.

People could manually add the ignore by piping through another command, but it's not really fair to expect people to do that.

Appreciate that I'm providing problems not solutions here, but I also feel like doing:

const ingredient = result as unknown as Ingredient

Isn't too egregious, and is fairly common anyway.


Actually, I came up with a (potential) solution!

Since you're likely to need to use as anyway to type things coming from Json, we could just change the Json type to be the following:

export type Json = string | number | boolean | null | unknown | Json[]

const result: Json = { id: 1, name: 'Berries', quantity: '1 cup' }
const i: Ingredient = result as Ingredient

This then throws no errors.

However, this identical to doing export type Json = unknown, so we could just remove Json entirely, if we were to go down this route. Interested to hear what people's opinions are.

from postgres-meta.

isaacharrisholt avatar isaacharrisholt commented on August 26, 2024

I agree, I think it would be more productive to use unknown and remove the Json type entirely. Then we can cast freely and not violate any ESLint rules.

I think the first step would be to change the export to export type Json = unknown , but mark it as deprecated, and perhaps include a warn message in the Supabase CLI.

from postgres-meta.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.