TypeORM:如何为列添加自定义选项并从列元数据中获取?
在TypeORM中添加并获取列的自定义选项
1. 扩展Column选项的类型定义(TypeScript必做)
TypeORM默认的ColumnOptions类型不包含自定义字段,需要先扩展类型避免TypeScript编译错误。在项目中创建一个类型声明文件(比如typeorm.d.ts),添加以下代码:
import { ColumnOptions } from "typeorm"; declare module "typeorm" { interface ColumnOptions { customOption?: string; // 可根据需求修改类型,比如number、boolean等 } }
2. 使用自定义选项
完成类型扩展后,就能在@Column装饰器中正常使用customOption,示例代码如下:
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; @Entity() export class YourEntity { @PrimaryGeneratedColumn() id: number; @Column({ type: 'varchar', length: 150, unique: true, customOption: 'customValue' }) name: string; }
3. 从列元数据中获取自定义选项值
TypeORM会将列的所有配置存储在实体元数据中,你可以通过两种方式获取:
方法一:通过Repository获取元数据
import { getRepository } from "typeorm"; import { YourEntity } from "./entities/YourEntity"; async function getCustomOption() { const repo = getRepository(YourEntity); // 获取当前实体的元数据 const entityMetadata = repo.metadata; // 定位到目标列 const targetColumn = entityMetadata.columns.find(col => col.propertyName === 'name'); if (targetColumn) { // 提取自定义选项值 const customValue = targetColumn.options.customOption; console.log(customValue); // 输出: customValue } }
方法二:通过元数据存储直接获取
import { getMetadataArgsStorage } from "typeorm"; import { YourEntity } from "./entities/YourEntity"; function getCustomOption() { // 获取实体对应的表元数据 const tableMetadata = getMetadataArgsStorage().tables.find(table => table.target === YourEntity); if (tableMetadata) { // 定位到目标列的元数据 const columnMetadata = tableMetadata.columns.find(col => col.propertyName === 'name'); if (columnMetadata) { // 提取自定义选项值 const customValue = columnMetadata.options.customOption; console.log(customValue); // 输出: customValue } } }
内容的提问来源于stack exchange,提问作者KDI
相关产品推荐
相关产品推荐

