typescript - NestJs Error de Tipo - El argumento de tipo 'undefined' no se puede asignar al parámetro de tipo 'string | symbol'
De repente obtengo un error de tipo al usar el decorador InjectRepository en NestJs. Este error ocurre en cada servicio.
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
}
}
Recibo el siguiente error: Incapaz de resolver la firma del decorador de parámetro cuando se llama como una expresión. El argumento de tipo 'undefined' no es asignable al parámetro de tipo 'string | symbol'.ts(1239)
Realmente no sé por qué aparece esto.
Respuesta #1
He tenido este error de lint al usar @Inject(forwardRef(() => Class)).
Se puede resolver actualizando @nestjs/common a v9.3.0.
Aparentemente, este fue un problema introducido por TypeScript v5. "[esto] introduce un cierto endurecimiento en la verificación de tipos de decoradores."1
Cómo funcionaba 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) {}
}
Como puedes ver, Inject requiere un segundo argumento que es un symbol o un string.
NestJS v9.3.0 ha resuelto esto en este PR fusionado: Los decoradores de parámetros del constructor deberían permitir que undefined sea el tipo de la clave #10959
