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

TypeORM 0.3.7版本中导入Relation失败问题求助

解决TypeORM 0.3.7中Relation导入失败的问题

问题原因

你遇到的错误是因为Relation是TypeORM提供的TypeScript类型,而非运行时可执行的值。在ESM模块规范下,直接将其作为普通值导入会导致Node.js无法找到对应的导出项——TypeORM 0.3.x版本中仅将Relation作为类型导出,而非运行时变量。

解决方案

将Relation改为类型导入即可解决问题,有两种写法:

写法1:分离类型导入

import { Column, Entity, OneToOne, PrimaryGeneratedColumn } from 'typeorm';
import type { Relation } from 'typeorm';
import { Vehicle } from './vehicle';

@Entity({ name: 'vehicle_default_values' })
export class VehicleDefaultValues {
    @PrimaryGeneratedColumn({ unsigned: true })
    id: number;

    @Column({ type: 'int', unsigned: true, unique: true })
    model: number;

    @Column({ type: 'float', default: 550 })
    maxFuel: number;

    @Column({ type: 'boolean', default: false })
    isElectric: boolean;

    @Column({ type: 'float', default: 0.008 })
    fuelConsumption: number;

    @Column({ type: 'mediumint', unsigned: true, default: 200 })
    maxSpeed: number;

    @Column({ type: 'mediumint', unsigned: true, default: 50 })
    trunkVolume: number;

    @Column({ type: 'text', nullable: true })
    vehicleExtras: string;

    @OneToOne(() => Vehicle, (vehicle) => vehicle.vehicleDefaultValues)
    vehicle: Relation<Vehicle>;
}

写法2:合并导入(TS 4.5+支持)

import { Column, Entity, OneToOne, PrimaryGeneratedColumn, type Relation } from 'typeorm';
import { Vehicle } from './vehicle';

@Entity({ name: 'vehicle_default_values' })
export class VehicleDefaultValues {
    @PrimaryGeneratedColumn({ unsigned: true })
    id: number;

    @Column({ type: 'int', unsigned: true, unique: true })
    model: number;

    @Column({ type: 'float', default: 550 })
    maxFuel: number;

    @Column({ type: 'boolean', default: false })
    isElectric: boolean;

    @Column({ type: 'float', default: 0.008 })
    fuelConsumption: number;

    @Column({ type: 'mediumint', unsigned: true, default: 200 })
    maxSpeed: number;

    @Column({ type: 'mediumint', unsigned: true, default: 50 })
    trunkVolume: number;

    @Column({ type: 'text', nullable: true })
    vehicleExtras: string;

    @OneToOne(() => Vehicle, (vehicle) => vehicle.vehicleDefaultValues)
    vehicle: Relation<Vehicle>;
}

额外说明

  • 这种类型导入的方式不仅能解决当前的语法错误,还能在编译时剔除类型相关代码,不会增加运行时体积。
  • 若你使用的TypeScript版本低于4.5,只能采用第一种分离导入的写法。

内容的提问来源于stack exchange,提问作者Nils van Lück

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:54:25