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

如何获取QueryDeepPartialEntity或同类类型用于TypeORM实体创建?

在TypeORM中实现类似QueryDeepPartialEntity的功能

TypeORM本身支持灵活的实体字段控制,要实现类似QueryDeepPartialEntity的部分字段实体创建功能,可以通过以下几种方式实现,适配不同场景:

1. 基础场景:直接使用内置Partial类型

如果你的实体没有嵌套关联关系,直接用Partial<User>数组就能满足批量插入需求——TypeORM的insert()方法会自动忽略未传入的字段:

const userPayload: Partial<User>[] = [];

userPayload.push({
  age: 12,
  id: 0,
  firstName: "",
  lastName1: "",
});

const queryBuilder = AppDataSource.createQueryBuilder();
await queryBuilder.insert().into(User).values(userPayload).execute();

2. 深层嵌套场景:自定义DeepPartial类型

如果实体包含嵌套对象或数组(比如用户关联地址、订单等子实体),需要让所有层级的字段都可选,可以自定义一个递归的DeepPartial类型:

// 定义深层递归可选类型
type DeepPartial<T> = {
  [P in keyof T]?: T[P] extends Array<infer U>
    ? Array<DeepPartial<U>>
    : T[P] extends object
    ? DeepPartial<T[P]>
    : T[P];
};

// 使用自定义类型定义批量插入数据
const userPayload: DeepPartial<User>[] = [];

userPayload.push({
  age: 12,
  firstName: "",
  // 假设User包含嵌套的Address实体,可仅传入部分字段
  address: {
    city: "Beijing"
  }
});

const queryBuilder = AppDataSource.createQueryBuilder();
await queryBuilder.insert().into(User).values(userPayload).execute();

这个类型会递归处理所有嵌套结构,完全模拟QueryDeepPartialEntity的深层可选能力。

3. 精准控制场景:自定义CreateMany风格类型

如果你想更贴近Prisma中Prisma.FactorsCreateManyInput的精准字段控制,可以自定义仅包含插入允许字段的类型:

// 定义仅包含允许插入字段的类型
type UserCreateManyInput = Pick<User, 'id' | 'age' | 'firstName' | 'lastName1'>;
// 结合Partial让字段可选
type UserCreateManyPartialInput = Partial<UserCreateManyInput>;

// 使用该类型
const userPayload: UserCreateManyPartialInput[] = [];

userPayload.push({
  age: 12,
  id: 0,
  firstName: "",
  lastName1: "",
});

const queryBuilder = AppDataSource.createQueryBuilder();
await queryBuilder.insert().into(User).values(userPayload).execute();

这种方式能严格限制插入时可传入的字段,避免误传实体中不允许被插入的属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:10:06