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:
class SomeExpression<T> implements Expression<T> {
get expressionType(): T | undefined {
return undefined
}
}
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>
.
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:
class SomeExpression<T> implements Expression<T> {
toOperationNode(): OperationNode {
return sql`some sql here`.toOperationNode()
}
}
Generated using TypeDoc
Expression
represents an arbitrary SQL expression with a type.Most Kysely methods accept instances of
Expression
and most classes likeSelectQueryBuilder
and the return value of the sql template tag implement it.You can implement the
Expression
interface to create your own type-safe utilities for Kysely.