Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

228
Views
CRA + Inversify @inject Error de análisis del módulo: carácter inesperado '@'

este es el error que me sale

./src/core/providers/todoApi/TodoApiProvider.ts 10:14 Error al analizar el módulo: carácter inesperado '@' (10:14) El archivo se procesó con estos cargadores:

  • ./node_modules/react-scripts/node_modules/@pmmmwh/react-refresh-webpack-plugin/loader/index.js
  • ./node_modules/babel-loader/lib/index.js Es posible que necesite un cargador adicional para manejar el resultado de estos cargadores. | clase TodoApiProvider {

constructor(@inyectar(TIPOS.HttpClient) | httpClient) { | this.httpClient = vacío 0;

TodoApiProvider.ts

 class DefaultTodoApiProvider implements TodoApiProvider { private httpClient: HttpClient; // @inject(TYPES.HttpClient) return error constructor(@inject(TYPES.HttpClient) httpClient: HttpClient) { this.httpClient = Dependency.get(TYPES.HttpClient); } async getTodoById(id: string) { const data = await this.httpClient.get( `https://jsonplaceholder.typicode.com/todos/${id}` ); return data; } } decorate(injectable(), TodoApiProvider); export default DefaultTodoApiProvider;

Si pongo @inject(TYPES.HttpClient) encima private httpClient: HttpClient; obtendrá otro error Cannot access 'TYPES' before initialization .

.babelrc

 { "presets": [ ..., "@babel/preset-typescript" ], "plugins": [ ..., "babel-plugin-transform-typescript-metadata", ["@babel/plugin-proposal-decorators", { "legacy": true }], ["@babel/plugin-proposal-class-properties", { "loose": true }] ], "env": { "test": { "plugins": [ "transform-require-context", "babel-plugin-transform-typescript-metadata", "babel-plugin-parameter-decorator" ] } } }

tsconfig.js

 { "compilerOptions": { ..., "emitDecoratorMetadata": false, }, }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Las propuestas de decorador de la etapa 1 y la etapa 2 no admiten decoradores de parámetros. Los @babel/plugin-proposal-decorators que implementan las propuestas no saben cómo manejar los decoradores de parámetros. Como resultado, se produjo el mensaje de error Unexpected character '@' . Solo Typescript es consciente de los decoradores de parámetros .

Uso Next.js no CRA pero creo que es el mismo problema. Para Next.js, resolví este problema instalando ts-loader y configurando la configuración del paquete web de Next.js para usar ts-loader antes que babel-loader.

El fragmento a continuación es específico de Next.js. Lo menciono para aclarar mi punto.

 config.module.rules.forEach((rule) => { if (rule.test instanceof RegExp && rule.test.test(".ts")) { if (Array.isArray(rule.use)) { rule.use.push("ts-loader"); } else { rule.use = [rule.use, "ts-loader"]; } } });

Acerca de acceder a TIPOS antes de la inicialización, no investigué por qué sucede, ya que se resuelve usando ts-loader también al solucionar el primer problema.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!