neondatabase / serverless

Connect to Neon PostgreSQL from serverless/worker/edge functions
https://www.npmjs.com/package/@neondatabase/serverless
MIT License
318 stars 11 forks source link

Setting strict true in `tsconfig.json` results in TS error #66

Closed nooblyf closed 3 months ago

nooblyf commented 4 months ago

Steps to reproduce

Set strict in tsconfig to true

Connect

import { neon } from "@neondatabase/serverless";
import { drizzle } from "drizzle-orm/neon-http";

import { DATABASE_URL } from "$env/static/private";

const sql = neon(DATABASE_URL);
export const DB = drizzle(sql);

Expected result

No TS error

Actual result

TS error:

Screenshot 2024-03-01 at 00 39 39

Environment

typescript v5.3.3 @sveltejs/kit v2.5.2 node v20.10.0 pnpm 8.11.0

Logs, links

Argument of type 'NeonQueryFunction<false, false>' is not assignable to parameter of type 'NeonQueryFunction<boolean, boolean>'.
  Types of property 'transaction' are incompatible.
    Type '<ArrayModeOverride extends boolean = false, FullResultsOverride extends boolean = false>(queriesOrFn: NeonQueryPromise<false, false, any>[] | ((sql: NeonQueryFunctionInTransaction<ArrayModeOverride, FullResultsOverride>) => NeonQueryInTransaction[]), opts?: HTTPTransactionOptions<...> | undefined) => Promise<...>' is not assignable to type '<ArrayModeOverride extends boolean = boolean, FullResultsOverride extends boolean = boolean>(queriesOrFn: NeonQueryPromise<boolean, boolean, any>[] | ((sql: NeonQueryFunctionInTransaction<ArrayModeOverride, FullResultsOverride>) => NeonQueryInTransaction[]), opts?: HTTPTransactionOptions<...> | undefined) => Promise...'.
      Types of parameters 'queriesOrFn' and 'queriesOrFn' are incompatible.
        Type '((sql: NeonQueryFunctionInTransaction<any, any>) => NeonQueryInTransaction[]) | NeonQueryPromise<boolean, boolean, any>[]' is not assignable to type '((sql: NeonQueryFunctionInTransaction<any, any>) => NeonQueryInTransaction[]) | NeonQueryPromise<false, false, any>[]'.
          Type 'NeonQueryPromise<boolean, boolean, any>[]' is not assignable to type '((sql: NeonQueryFunctionInTransaction<any, any>) => NeonQueryInTransaction[]) | NeonQueryPromise<false, false, any>[]'.
            Type 'NeonQueryPromise<boolean, boolean, any>[]' is not assignable to type 'NeonQueryPromise<false, false, any>[]'.
              Type 'NeonQueryPromise<boolean, boolean, any>' is not assignable to type 'NeonQueryPromise<false, false, any>'.
                Type 'boolean' is not assignable to type 'false'.ts(2345)
jawj commented 4 months ago

Thanks for letting us know. We (and drizzle) are investigating.

ricaringa commented 4 months ago

@jawj any news on this? I just got started with drizzle and got stuck with this.

araf821 commented 4 months ago

Downgrading to "drizzle-orm": "^0.28.6" solved the issue for me.

jawj commented 4 months ago

Sorry for the delay. The drizzle guys say they hope to fix it this weekend.

bricesuazo commented 4 months ago

Adding NeonQueryFunction<boolean, boolean> to sql seems to fix the typescript error.

import { neon } from "@neondatabase/serverless";
import type { NeonQueryFunction } from "@neondatabase/serverless";
import { drizzle } from "drizzle-orm/neon-http";

const sql: NeonQueryFunction<boolean, boolean> = neon(DATABASE_URL);

export const DB = drizzle(sql);
jawj commented 3 months ago

I'm told that drizzle 0.30.3 fixes this problem. I'll close this issue if someone can confirm.

Sorry again that this has taken a while.

bricesuazo commented 3 months ago

I can confirm this is fixed in "drizzle-orm": "0.30.3"

jawj commented 3 months ago

Many thanks.