Skip to content

What would be the right type to pass an object? #625

Open
@timonson

Description

@timonson

Hello,

in my table "account" the column "contact" is of the type jsonb. Using the following interface, I get an TS Error:

error: TS2769 [ERROR]: No overload matches this call.
Overload 1 of 2, '(first: TemplateStringsArray, ...rest: never): PendingQuery<Row[]>', gave the following error.
Argument of type 'string' is not assignable to parameter of type 'never'. Overload 2 of 2, '(template: TemplateStringsArray, ...parameters: readonly ParameterOrFragment[]): PendingQuery<Row[]>', gave the following error.
Argument of type 'object' is not assignable to parameter of type 'ParameterOrFragment'.
return await sql`

I have two questions:

  1. Is it correct to pass an object like this for jsonb?
  2. If yes, what could I do to avoid the TS error?

Thank you very much!

interface AccountData {
  owner: string;
  email: string;
  contact: object;
  password: string;
}

async function insertAccount(
  { owner, email, contact, password }: AccountData,
) {
  return await sql`
    INSERT INTO public.account (owner, email, contact, hashed_password)
    VALUES (${owner}, ${email}, ${contact}, crypt(${password}, gen_salt('md5')))
  `;
}

const dataJane = {
  owner: "Jane Doe",
  email: "[email protected]",
  contact: { "phone": "12345" },
  password: "password123",
};

await insertAccount(dataJane);

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions