max*_*han 2 repository decorator typescript nestjs
在 NestJs 中使用 InjectRepository 装饰器时,突然出现类型错误。每个服务都会发生此错误。
constructor(
private userRepository: UserRepository,
@InjectRepository(Workout) <--- Error
private workoutRepository: Repository<Workout>,
) {}
Run Code Online (Sandbox Code Playgroud)
{
"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
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误: 作为表达式调用时无法解析参数装饰器的签名。“未定义”类型的参数不可分配给“字符串|”类型的参数 符号'.ts(1239)
我实在不知道为什么会出现这个。
小智 5
我使用 时遇到了这个 lint 错误@Inject(forwardRef(() => Class))。
可以通过更新@nestjs/common到 来解决v9.3.0。
显然,这是 TypeScript v5 引入的问题。“[它]对装饰器类型检查进行了一些收紧。” 1
如何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) {}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,Inject需要第二个参数,即 asymbol或 a string。
NestJS v9.3.0 在此合并 PR 下解决了这个问题:构造函数参数装饰器应该允许未定义作为键的类型 #10959