如何更新TypeORM实体可空列?TypeScript报错及数据库疑问
问题解答
1. 你忽略的点
TypeScript的可选属性?: number仅表示该属性可以是number或undefined,不包含null类型。你给lockedTimestamp赋值null,刚好触发了严格模式下的类型检查错误。
2. 可空列的定义问题
数据库层面的定义是正确的:nullable: true已经告诉TypeORM该列允许存储null。但TypeScript类型定义没跟上,需要把属性类型改成包含null的联合类型:
@Column({ type: 'bigint', nullable: true, }) lockedTimestamp?: number | null;
或者直接写成:
lockedTimestamp: number | null | undefined;
这样TypeScript就会允许赋值null、undefined或数值类型了。
3. 赋值undefined的数据库行为
不会报错。TypeORM对undefined的处理逻辑是:
- 创建新实体时,
undefined会被视为“未设置该字段”,数据库会自动给该列存入null(因为你已设置nullable: true); - 更新实体时,TypeORM不会把
undefined对应的字段加入更新语句,数据库里该列的原有值会保持不变,不会触发错误。
内容的提问来源于stack exchange,提问作者Martin54
相关产品推荐
相关产品推荐

