我在一个带有 esm 的 Nodejs 项目中使用 typeorm。我需要使用关系包装器来避免循环依赖。
当我尝试使用关系包装器时出现此错误:
import { Column, Entity, OneToOne, PrimaryGeneratedColumn, Relation } from 'typeorm';
^^^^^^^^
SyntaxError: The requested module 'typeorm' does not provide an export named 'Relation'
代码文件:
import { Column, Entity, OneToOne, PrimaryGeneratedColumn, 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>;
}
使用的typeorm版本:0.3.7
发生这种情况可能是因为将文件转换为 JavaScript 时未包含类型。导入
Column
、Entity
、OneToOne
、PrimaryGeneratedColumn
都是函数,而导入 Relation
是类型。
使用 typescript 3.8 或更高版本,您可以明确地告诉您正在导入这样的类型:
import { Column, Entity, OneToOne, PrimaryGeneratedColumn } from 'typeorm';
import type { Relation } from 'typeorm';
或者使用 typescript 4.5 或更新版本,你可以这样做:
import { Column, Entity, OneToOne, PrimaryGeneratedColumn, type Relation } from 'typeorm';