生成的TypeScript文件因ManyToOne关系导致重复变量名错误求助
解决FooServiceUpdate组件中变量重复声明错误
问题场景
项目自动生成的foo-service-update.component.ts文件代码如下:
import { type IFooService, FooService } from '@/shared/model/foo-service.model'; export default defineComponent({ compatConfig: { MODE: 3 }, name: 'FooServiceUpdate', setup() { ... const fooService: Ref<IFooService> = ref(new FooService()); const fooService = inject('fooService', () => new FooService()); ... });
运行时触发错误:
The symbol "fooService" has already been declared
排查确认该错误与以下ManyToOne关联关系直接相关,移除该关联后错误消失:
relationship ManyToOne { FooService to Foo }
问题原因
代码生成逻辑在处理ManyToOne关联时,重复声明了fooService变量——先通过ref创建本地实例,又通过inject再次声明同名变量,违反了TypeScript的变量唯一性声明规则。
解决方案
根据组件实际需求选择以下任一方式修正:
方案1:保留注入实例(适用于依赖全局/父组件提供的FooService实例场景)
删除通过ref创建的本地变量声明,仅保留注入逻辑:
import { type IFooService, FooService } from '@/shared/model/foo-service.model'; export default defineComponent({ compatConfig: { MODE: 3 }, name: 'FooServiceUpdate', setup() { ... const fooService = inject('fooService', () => new FooService()); ... });
方案2:保留本地实例(适用于组件独立维护FooService实例场景)
删除注入的变量声明,仅保留本地ref创建的实例:
import { type IFooService, FooService } from '@/shared/model/foo-service.model'; export default defineComponent({ compatConfig: { MODE: 3 }, name: 'FooServiceUpdate', setup() { ... const fooService: Ref<IFooService> = ref(new FooService()); ... });
方案3:重命名变量(需同步修改后续使用该变量的代码)
若需同时保留本地实例和注入实例,将其中一个变量重命名:
import { type IFooService, FooService } from '@/shared/model/foo-service.model'; export default defineComponent({ compatConfig: { MODE: 3 }, name: 'FooServiceUpdate', setup() { ... const localFooService: Ref<IFooService> = ref(new FooService()); const injectedFooService = inject('fooService', () => new FooService()); ... });
内容的提问来源于stack exchange,提问作者vic
相关产品推荐
相关产品推荐

