# @arthurfiorette/prisma-kysely 中文文档

规范地址：https://npmcn.com/package/%40arthurfiorette/prisma-kysely/

版本：3\.1\.1
npm 元数据更新时间：2026-07-06T21:38:32.206Z
中文译文更新时间：2026-11-06T21:01:26.333Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40arthurfiorette/prisma-kysely
原文对照：https://npmcn.com/package/%40arthurfiorette/prisma-kysely/?lang=original
项目主页：https://github.com/valtyr/prisma-kysely#readme
源码仓库：https://github.com/valtyr/prisma-kysely

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：55.9 kB，6 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：5 个
- peer 依赖：prisma \>=7\.0\.0
- 首次发布：2025-01-10T18:40:46.050Z
- 最新版本发布：2026-07-06T21:38:32.084Z
- 近 30 天下载量：72576（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：8（近 12 个月 1 个）

## 中文简介

从 Prisma 计划生成 Kysely 数据库类型

## 安装

```sh
npm install @arthurfiorette/prisma-kysely
```

也可以使用：`pnpm add @arthurfiorette/prisma-kysely`、`yarn add @arthurfiorette/prisma-kysely`、`bun add @arthurfiorette/prisma-kysely`

## README

![Prisma Kysely](https://npmcn.com/package/%40arthurfiorette/prisma-kysely/assets/logo-hero.png)

[![](https://badge.fury.io/js/prisma-kysely.svg)](https://www.npmjs.com/package/prisma-kysely) [![](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/N4N7QQZVA)

  

![Hero image "Generate Kysely types directly from your Prisma schema"](https://npmcn.com/package/%40arthurfiorette/prisma-kysely/assets/hero.png)

  

你喜欢普里斯玛的迁徙流动 语言和DX,但不喜欢 prisma 客户端的限制? 您想要驾驭 SQL 的生电源 而不失去 TypeScript 类型系统的安全性 ?

**输入 `prisma-kysely`**来啊!

### 设置

1.  安装 `prisma-kysely` 使用您选择的软件包管理器 :
    
    ```sh
    bun add prisma-kysely
    ```
    
2.  替换您的默认客户端生成器 `schema.prisma` 包含下列文件:
    
    ```prisma
    generator kysely {
        provider = "prisma-kysely"
    
        // Optionally provide a destination directory for the generated file
        // and a filename of your choice
        output = "../src/db"
        fileName = "types.ts"
        // Optionally generate runtime enums to a separate file
        enumFileName = "enums.ts"
        // Optionally add content at the start of generated files (imports, pragmas, comments, etc.)
        banner = "import type { Decimal } from 'decimal.js';"
        // For multi-line, use Prisma's triple-quoted string syntax (see below)
    }
    ```
    
3.  运行 `prisma migrate dev` 或者说 `prisma generate` 并使用您新产生的 切入凯斯利的瞬间!
    

### 横幅配置

这个 `banner` 选项允许您在生成文件开始时添加自定义内容。 这对进口自定义类型和库特别有用:

```prisma
generator kysely {
    provider = "prisma-kysely"
    output = "../src/db"
    fileName = "types.ts"

    // Add custom imports for libraries you need in generated types
    banner = """
import type { Decimal } from 'decimal.js';
import { Big } from 'big.js';
import * as moment from 'moment';
import { v4 as uuid } from 'uuid';
import type { SomeType } from './custom-types';
"""
}
```

这将生成一个以 :

```typescript
import type { Decimal } from "decimal.js";
import { Big } from "big.js";
import * as moment from "moment";
import { v4 as uuid } from "uuid";
import type { SomeType } from "./custom-types";

import type { ColumnType } from "kysely";
// ... rest of generated types
```

### 动机

普里斯玛的迁移和计划定义工作流程不可否认是巨大的 prisma 客户端的类型安全性是顶级的, 但每次都会有一次 Prisma用户的生活 客户端变得有点过于有限 有时 我们只需要自己写多张桌子 加入并挤出多余的 表现出我们的应用。 Prisma 客户端提供了两个选项: 简化查询 API 或用原始 SQL 字符串全程输入, 牺牲类型 保证安全.

这是凯斯利发光的地方。 Kysely 提供了一个工具箱来写表达式, 带有完全自动补全的类型安全 SQL 查询。 不过Kysely的问题 说到计划定义和 移徙。 许多用户使用类似 Prisma 的定义 其数据库的结构,以及 `kysely-codegen` 来回顾一下他们 数据库.

这个包裹, `prisma-kysely`是一种比较综合和方便的方式 保持 Kysely 类型与 Prisma 计划同步。 做了个先决条件 更改您的计划文件, 它就像使用 普里斯玛自己的客户端.

我和Cloudflare的D1一起用这个组合几个月了 我的个人项目和Postgres的工作。 它是一个改变游戏,我 希望对你同样有用

### 配置

| 密钥 | 说明 | 默认 |
| :-- | :-- | --- |
| `output` | 将保存生成代码的目录 |  |
| `fileName` | 生成文件的文件名 | `types.ts` |
| `importExtension` | 导入附件的扩展 。 例如: `".js"` 或者说 `".ts"`启用 `""` 以不附带任何附件. | `""` |
| `enumFileName` | 生成的enum 的文件名 。 使用此选项将生成同一文件中的enum和文件 。 忽略当 `schemaGrouping` 实值 `"namespace"` 或者说 `"exports"`,其中分组输出拥有enum放置. |  |
| `camelCase` | 启用对 Kysely 骆驼Case 插件的支持 | `false` |
| `exportWrappedTypes` | 冰盖包裹的种类,例如: `Selectable<Model>` 也按 [Kysely 文档](https://kysely.dev/docs/getting-started#types)。导出的类型遵循文件的命名惯例. | `false` |
| `banner` | 要预留到生成文件开始的内容 。 适用于自定义进口,实用工具指令(例如, `// @ts-nocheck`),评论,或任何其他内容. 支持单行字符串或多行通过 Prisma 三引字符串(`""" ... """`) (中文(简体) ). 内容被逐字插入到文件的顶部 . |  |
| `readOnlyIds` | 用凯斯利的 `GeneratedAlways` 页:1 `@id` 字段带有默认值,防止插入并更新. | `false` |
| `enumArrayType` | Prisma enum 阵列的控件生成类型 。 使用 `"array"` 当您的 PostgreSQL 驱动程序将 enum- array OID 切入数组时, 或 `"string"` 键入原始 pg 阵列文字,例如 `{FOO,BAR}`。 。 。 . | `array` |
| `[typename]TypeOverride` | 允许您为任何 Prisma 类型覆盖生成的 TypeScript 类型 。 瞄准与节点不同的环境时有用( 如 WinterCG 兼容运行时使用 UInt8Arrays 而非缓冲器用于二进制类型等) 。 看看这个 [配置验证符](https://github.com/valtyr/prisma-kysely/blob/main/src/utils/validateConfig.ts) 用于完整选项列表. |  |
| `dbTypeName` | 允许您用所有表格覆盖导出类型 | `DB` |
| `schemaGrouping` | 控制策略组 使用 `"none"` 用于平面输出, `"namespace"` 用于单文件 `export namespace Schema` 输出,或 `"exports"` 发送 `types/index.ts` 外加再导出每个schema文件 `export * as Schema from "./schema"`。 。 。 . | `none` |
| `filterBySchema` | 当使用多子计时,只包括指定子计的模型和元计. | `false` |
| `defaultSchema` | 当使用多方案时,宣布哪些方案应保持未组合。 在命名空间模式中,它没有被包;在导出模式中,它留在索引文件中. | `'public'` |

### Schema 分组

`schemaGrouping` 控制多镜像模型和谜团的组合.

与 `schemaGrouping = "namespace"`,所有组图都保留在配置中 类型文件 :

```ts
export namespace Animals {
  export type Dog = {
    id: string;
  };
}

export type DB = {
  "animals.dogs": Animals.Dog;
};
```

与 `schemaGrouping = "exports"` 财务报告和审定财务报表 `fileName = "types.ts"`,输出为写入 改为 `types/index.ts` 旁边有计划文件,例如 `types/animals.ts`数字 :

```ts
// types/index.ts
import type * as Animals from "./animals";

export * as Animals from "./animals";

export type DB = {
  "animals.dogs": Animals.Dog;
};
```

```ts
// types/animals.ts
export type Dog = {
  id: string;
};
```

如果 schema 文件导出在主命名空间 DB 旁边使自动完成吵闹 类型,更喜欢在 Prisma 和 DB 类型自行居住的单列坡设置 软件包。 从该软件包中导出您的应用程序只应导出主命名空间类型 消费.

### PostgreSQL enum 阵列

PostgreSQL 驱动程序例如 `pg` 不自动解析用户定义的 enum 阵列 OID. 见 [节点- pg- 类型# 56](https://github.com/brianc/node-pg-types/issues/56#issuecomment-323223477)。 。 。 . 如果您的应用程序注册了 enum- array 解析器, 请保留默认值 `enumArrayType = "array"`。 。 。 . 否则就定了 `enumArrayType = "string"` 以匹配原始 pg 阵列文字.

安装 `postgres-array` 如果您使用下面的解析器。 登记解析器一次, 在运行读取阵列的查询前:

```ts
import { Kysely, PostgresDialect } from "kysely";
import pg from "pg";
import { parse as parsePostgresArray } from "postgres-array";

const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL });

// Registers enum array types.
// https://github.com/brianc/node-pg-types/issues/56#issuecomment-323223477
{
  const { rows } = await pool.query<{ typarray: number | string }>(
    `
    select t.typarray
    from pg_type as t
    inner join pg_namespace as n on n.oid = t.typnamespace
    where n.nspname not in ('pg_catalog', 'information_schema', 'pg_toast')
      and t.typtype = 'e'
      and t.typarray is not null
      and t.typarray != 0
  `
  );

  for (const row of rows) {
    pg.types.setTypeParser(Number(row.typarray), (value) =>
      value ? parsePostgresArray(value) : value
    );
  }
}

const db = new Kysely<DB>({
  dialect: new PostgresDialect({ pool }),
});
```

### 每个字段类型覆盖

在某些情况下,您可能想要为特定字段覆盖一个类型。 这个 例如,用于将字符串类型限制于某些字节 数值。 要知道,虽然这当然不会带来任何运行时间 校正,而且在大多数情况下,无法保证与实际数据相匹配 数据库.

恕我直言,事情是这样的: 添加一个 `@kyselyType(...)` 声明 以三鞭划去 `///`用于外地 括号里有你喜欢的类型.

```prisma
model User {
  id          String @id
  name        String

  /// @kyselyType('member' | 'admin')
  role        String
}
```

括号可以包括任何有效的TS类型声明.

以上例子的产出如下:

```ts
export type User = {
  id: string;
  name: string;
  role: "member" | "owner";
};
```

### 抓到他们了

#### 默认值

默认情况下 (没有双关语) Prisma 查询引擎使用基于 JS 的 某些默认值的执行,即: `uuid()` 财务报告和审定财务报表 `cuid()`这个 表示它们最终不会在数据库中被定义为默认值 最终对我们来说是没用的.

虽然Prisma确实提供了很好的解决方案 `dbgenerated()`。这允许我们使用任何有效的默认值表达式 我们的数据库支持:

```prisma
model PostgresUser {
   id    String @id @default(dbgenerated("gen_random_uuid()"))
}

model SQLiteUser {
   id    String @id @default(dbgenerated("(uuid())"))
}
```

[检查一下Prisma医生 信息输入.](https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#attribute-functions)

### 捐款

OKG,你真的想贡献? 非常感谢! 🙇‍♂️

这是所有你需要做的(如果有东西不见了,告诉我... )

1.  叉并拉出仓库
2.  运行 `bun install` 财务报告和审定财务报表 `bun dev` 开始 `tsc` 在监视模式中.
3.  更改源代码
4.  通过创建测试您的更改 `prisma/schema.prisma`运行 `bun prisma generate` 并检查输出 `prisma/types.ts`。必须设置提供者 参考dev建筑如下:
    
    ```prisma
    generator kysely {
        provider = "node ./dist/bin.js"
    }
    ```
    
5.  创建拉动请求 ! 如果你的改变是合情合理的 我会尽力去审查 并迅速合并它们.

我不百分之百确定这一点 [类型 地图](https://github.com/valtyr/prisma-kysely/blob/main/src/helpers/generateFieldType.ts) 每一个方言都是正确的, 所以任何和所有的贡献 战线 非常感谢。 你遇到过或改进过的虫子也是一样 你可以考虑一下.

### 喊叫声

-   如果我没有用Robin Blomberg的神奇作品 我就不会造这个图书馆 [Kysely 密码源](https://github.com/RobinBlomberg/kysely-codegen)。为任何人 我全心全意推荐他的包裹.
-   隐含的多对多表生成代码部分灵感来自和 部分被盗 [`prisma-dbml-generator`](https://github.com/notiz-dev/prisma-dbml-generator/blob/752f89cf40257a9698913294b38843ac742f8345/src/generator/many-to-many-tables.ts)。 。 。 . 多亏了他们!
-   伊加尔·克勒巴诺夫(签名)[@igalklebanov (英语)](https://github.com/igalklebanov))和约克·索尔贝格(英语:[@jukul (英语)](https://github.com/jokull)作为这个图书馆的 推特上的主要支持者!
-   Kysely的作者和维护者

```diff
+ Boyce-Codd gang unite! 💽
```

## 常见问题

### @arthurfiorette/prisma-kysely 是什么？

从 Prisma 计划生成 Kysely 数据库类型

### 如何安装 @arthurfiorette/prisma-kysely？

在项目目录运行 npm install @arthurfiorette/prisma-kysely，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：prisma（\>=7\.0\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。它还提供命令行工具 prisma-kysely，可以用 npx prisma-kysely 直接运行。

### @arthurfiorette/prisma-kysely 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/arthurfiorette\_\_prisma-kysely 是否存在。

### @arthurfiorette/prisma-kysely 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @arthurfiorette/prisma-kysely 可以商用吗？

@arthurfiorette/prisma-kysely 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @arthurfiorette/prisma-kysely 的下载量有多少？

根据 npm 官方下载统计，@arthurfiorette/prisma-kysely 在 2026/10/07 – 2026/11/05 这 30 天内被下载 72,576 次，日均约 2,419 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @arthurfiorette/prisma-kysely 还在维护吗？

最新版本 3\.1\.1 发布于 2026/07/07（4 个月前）；至今共发布 8 个版本，其中过去 12 个月发布了 1 个；首次发布于 2025/01/11。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

