KyselyK
Kysely2y ago
Lion

TS2345: Argument of type  "id"  is not assignable to parameter of type  ReferenceExpression<Database

Code:
    const newToken = await db
        .selectFrom("tokens")
        .selectAll()
        .where("id", "=", token.insertId)
        .$narrowType<Token>()
        .executeTakeFirst();


Schema File:
import { ColumnType, Generated, Selectable } from "kysely";
import { TokenType } from "./lib/token";

export interface Database {
    tokens: TokenType;
}

export interface TokenTable {
    id: Generated<Number>;

    secret: string;
    description: string;
    type: TokenType;

    created_at: ColumnType<Date, string | undefined, never>;
}

export type Token = Selectable<TokenTable>;


TokenType Enum (incase it matters):
export enum TokenType {
    ADMIN,
    SERVER,
    CLIENT,
}


The code is giving me a typescript error for the first argument of the where clause, "id":
TS2345: Argument of type  "id"  is not assignable to parameter of type  ReferenceExpression<Database, "tokens"> 
Solution
So all in all

import { ColumnType, Generated, Selectable } from "kysely";
import { TokenType } from "./lib/token";

export interface Database {
    tokens: TokenTable; // <-- Uses the correct type
}

export interface TokenTable {
    id: Generated<number>; // <-- number instead of Number

    secret: string;
    description: string;
    type: TokenType;

    created_at: ColumnType<Date, string | undefined, never>;
}

export type Token = Selectable<TokenTable>;

const newToken = await db
    .selectFrom("tokens")
    .selectAll()
    // Cast bigint to number
    .where("id", "=", Number(token.insertId))
    // .$narrowType<Token>() <-- No need for this anymore.
    .executeTakeFirst();
Was this page helpful?