英文:
NestJs Type Error - Argument of type 'undefined' is not assignable to parameter of type 'string | symbol'
问题
Here's the translated content:
突然,在NestJs中使用InjectRepository装饰器时,我遇到了类型错误。这个错误在每个服务中都会发生。
我收到了以下错误消息:
无法解析参数装饰器的签名,当作为表达式调用时。
类型为'undefined'的参数无法分配给类型'string | symbol'。ts(1239)
我真的不知道为什么会出现这个错误。
英文:
Suddenly i get an type error when using the InjectRepository decorator in NestJs. This error happens in every service.
constructor(
private userRepository: UserRepository,
@InjectRepository(Workout) <--- Error
private workoutRepository: Repository<Workout>,
) {}
{
"compilerOptions": {
"module": "CommonJS",
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"target": "es2017",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true,
"skipLibCheck": true,
"strictNullChecks": true,
"noImplicitAny": true,
"strictBindCallApply": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"resolveJsonModule": true
}
}
I get the following error:
Unable to resolve signature of parameter decorator when called as an expression.
Argument of type 'undefined' is not assignable to parameter of type 'string | symbol'.ts(1239)
I really don't know why this appears.
答案1
得分: 4
我遇到了这个链接错误,使用 @Inject(forwardRef(() => Class))
。
这可以通过将 @nestjs/common
更新到 v9.3.0
来解决。
显然,这是由 TypeScript v5 引入的问题。
"[它] 引入了对装饰器类型检查的一些收紧。"<sup>1</sup>
Inject
的工作原理:
export declare const Inject:
(entity: Function) =>
(target: object, key: string | symbol, index?: number) => void;
export class Foo {}
export class C {
constructor(@Inject(Foo) x: any) {}
}
正如你所看到的,Inject
需要第二个参数,要么是一个 symbol
,要么是一个 string
。
NestJS v9.3.0 已经在这个合并的 PR 下解决了这个问题:Constructor parameter decorators should allow undefined as the type of key #10959
英文:
I've had this lint error raised using @Inject(forwardRef(() => Class))
.
It can be solved by updating @nestjs/common
to v9.3.0
.
Apparently, this was an issue introduced by TypeScript v5.
"[it] introduces some tightening on decorator type-checking."<sup>1</sup>
How Inject
worked:
export declare const Inject:
(entity: Function) =>
(target: object, key: string | symbol, index?: number) => void;
export class Foo {}
export class C {
constructor(@Inject(Foo) x: any) {}
}
As you can see, Inject
requires a second argument that's either a symbol
or a string
.
NestJS v9.3.0 has this solved under this merged PR: Constructor parameter decorators should allow undefined as the type of key #10959
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论