Búsqueda de sitios web

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