You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kysely ColumnType插入类型编译错误排查

Kysely Insertable 类型报错:number 无法赋值给 Int8(Generated 包裹 ColumnType 导致)

问题核心是Generated 导致 Insertable 没有正确解析 ColumnType 的插入类型。

你定义的 Int8 是 ColumnType<string, bigint | number | string, ...>,它的读取类型是 string,插入/更新类型是 bigint | number | string。但当用 Generated<Int8> 包裹后,Insertable<UserTable> 会把 phoneOneCountryId 的类型直接解析为 Int8(也就是读取时的 string 类型),而不是自动提取 ColumnType 里的插入类型。这就导致你赋值 number 时,出现类型不兼容的错误。

解决办法有两种:

1. 手动覆盖字段类型

定义 NewUser 时,直接覆盖该字段的插入类型:

// 先定义工具类型提取 ColumnType 的插入类型
type GetInsertType<T> = T extends ColumnType<any, infer InsertType, any> ? InsertType : T;

export type NewUser = Omit<Insertable<UserTable>, 'phoneOneCountryId'> & {
  // 可选,因为有默认值;如果要传值,允许 bigint/number/string
  phoneOneCountryId?: GetInsertType<Int8>;
};

2. 调整 Generated 的泛型参数(如果可以修改生成的代码)

如果能手动修改 codegen 生成的 UserTable,可以把 Generated<Int8> 改成直接使用插入类型,这样 Insertable 就能正确识别:

export interface UserTable {
  // ...
  phoneOneCountryId: Generated<bigint | number | string>;
  // ...
}

另外也可以检查下 Kysely 版本,部分旧版本对 Generated<ColumnType> 的类型处理有缺陷,升级到最新稳定版可能也能解决问题。

内容的提问来源于stack exchange,提问作者IfTrue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:20:58