Last Updated: 3/10/2026
- AliasableExpression
Interface AliasableExpression
An expression with an as method.
interface AliasableExpression<T> {
get expressionType(): undefined | T;
as<A extends string>(alias: A): AliasedExpression<T, A>;
as<A extends string>(alias: Expression<any>): AliasedExpression<T, A>;
toOperationNode(): OperationNode;
}
Type Parameters
- T
Hierarchy (View Summary)
- Expression<T>
- AliasableExpression
Implemented by
Index
Accessors
Methods
Accessors
expressionType
-
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
undefinedfrom it:Examples
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() }}The getter is needed to make the expression assignable to another expression only if the types
Tare assignable. Without this property (or some other property that referencesT), you could assingExpressiontoExpression.Returns undefined | T
Methods
as
-
as<A extends string>(alias: A): AliasedExpression<T, A>
Returns an aliased version of the expression.
Examples
In addition to slapping
as "the_alias"at the end of the expression, this method also provides strict typing:const result = await db . selectFrom('person') . select((eb) => // `eb.fn` returns an AliasableExpression eb. fn< string>('concat', ['first_name', eb. val(' '), 'last_name']). as('full_name') ) . executeTakeFirstOrThrow()// `full_name: string` field exists in the result type. console. log(result. full_name)The generated SQL (PostgreSQL):
select concat("first_name", $1, "last_name") as "full_name" from "person"You can also pass in a raw SQL snippet (or any expression) but in that case you must provide the alias as the only type argument:
import { sql } from 'kysely' const values = sql<{ a: number, b: string }>`(values (1, 'foo'))`// The alias is `t(a, b)` which specifies the column names// in addition to the table name. We must tell kysely that// columns of the table can be referenced through `t`// by providing an explicit type argument. const aliasedValues = values. as< 't'>(sql`t(a, b)`) await db . insertInto('person') . columns(['first_name', 'last_name']) . expression( db. selectFrom(aliasedValues). select(['t.a', 't.b']) ) . execute()The generated SQL (PostgreSQL):
insert into "person" ("first_name", "last_name") from (values (1, 'foo')) as t(a, b) select "t"."a", "t"."b"Type Parameters
- A extends string
Parameters
- alias: A
Returns AliasedExpression<T, A>
-
as<A extends string>(alias: Expression<any>): AliasedExpression<T, A>
Type Parameters
- A extends string
Parameters
- alias: Expression<any>
Returns AliasedExpression<T, A>
toOperationNode
-
toOperationNode(): OperationNode
Creates the OperationNode that describes how to compile this expression into SQL.
Examples
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
Settings
Member Visibility
On This Page
Accessors
Methods