Kysely
Kysely 是一個 類型安全
和 自動完成友好
的 TypeScript SQL 查詢構造器。
它允許開發人員使用流暢的 API 構建 SQL 查詢語句。它還有助於利用 TypeScript 檢測查詢中的錯誤。
一個小示例
在接下來的示例中,我們使用 Kysely 查詢構造器來從數據庫中獲取用戶信息:
import { Kysely, PostgresDialect } from 'kysely';
interface User { id: number; name: string; email: string;}
interface Post { id: number; title: string; content: string; authorId: number;}
interface DB { users: User; posts: Post;}
const db = new Kysely < DB > ({ dialect: new PostgresDialect({ pool: new Pool({ host: process.env.DATABASE_HOST, database: process.env.DATABASE_DB, user: process.env.DATABASE_USER, password: process.env.DATABASE_PASSWORD, port: Number(process.env.DATABASE_PORT), }), }),});
const user = db .selectFrom('users') .where('id', 1) .select(['id', 'name', 'email']) .executeTakeFirst();
Kysely 使用 DB
接口來輸入查詢結果。因此,TypeScript 將 user
變量定義為 User | undefined
(因為查詢可能返回空結果)。
Kysely 會將查詢結果以類型安全的方式返回。例如,如果我們嘗試去查詢一個在 user
類型中不存在的字段 foo
,則會出現 TypeScript 錯誤:
const user = db .selectFrom('users') .where('id', 1) // Type Error: Argument of type 'string[]' is not assignable to parameter of type 'SelectExpression<DB, "users">'. .select(['id', 'name', 'email', 'foo']) .executeTakeFirst();
錯誤消息不是很清楚,但它有助於檢測錯誤並防止運行時錯誤。
更多的特性在視頻中呈現
實用資源
- Kysely Docs https://kysely.dev/docs/intro
- Kysely GitHub https://github.com/kysely-org/kysely
- Kysely API Docs https://kysely-org.github.io/kysely-apidoc/
- Kysely Code Examples https://kysely.dev/docs/category/examples