kysely
    Preparing search index...

    Interface Expression<T>

    Expression represents an arbitrary SQL expression with a type.

    Most Kysely methods accept instances of Expression and most classes like SelectQueryBuilder and the return value of the sql template tag implement it.

    import { type Expression, sql } from 'kysely'

    const exp1: Expression<string> = sql<string>`CONCAT('hello', ' ', 'world')`
    const exp2: Expression<{ first_name: string }> = db.selectFrom('person').select('first_name')

    You can implement the Expression interface to create your own type-safe utilities for Kysely.

    interface Expression<T> {
        get expressionType(): undefined | T;
        toOperationNode(): OperationNode;
    }

    Type Parameters

    • T

    Hierarchy (View Summary)

    Index

    Accessors

    • get expressionType(): undefined | T

      All expressions need to have this getter for complicated type-related reasons. Simply add this getter for your expression and always return undefined from it:

      import { type Expression, type OperationNode, sql } from 'kysely'

      class SomeExpression<T> implements Expression<T> {
      get expressionType(): Tundefined {
      return undefined
      }

      toOperationNode(): OperationNode {
      return sql`some sql here`.toOperationNode()
      }
      }

      The getter is needed to make the expression assignable to another expression only if the types T are assignable. Without this property (or some other property that references T), you could assing Expression<string> to Expression<number>.

      Returns undefined | T

    Methods

    • Creates the OperationNode that describes how to compile this expression into SQL.

      If you are creating a custom expression, it's often easiest to use the sql template tag to build the node:

      import { type Expression, type OperationNode, sql } from 'kysely'

      class SomeExpression<T> implements Expression<T> {
      get expressionType(): T | undefined {
      return undefined
      }

      toOperationNode(): OperationNode {
      return sql`some sql here`.toOperationNode()
      }
      }

      Returns OperationNode