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

325
Views
get está en desuso: desde v4.0.0 use Type<T> o InjectionToken<T>

Después de cambiar a Angular 5.2.3 y ejecutar ng cli con una regla de linter de "deprecation": true , recibo el siguiente error en muchas de mis pruebas:

 get is deprecated: from v4.0.0 use Type<T> or InjectionToken<T>

La línea que se queja es algo así como

 fixture.debugElement.injector.get(MyService)

siendo MyService una clase utilizada para la inyección de dependencia.

No puedo adivinar cuál se supone que es la nueva sintaxis, ya que

 fixture.debugElement.injector.get<MyService>(MyService)

da un error de compilación que indica que el Argument of type 'typeof MyService' is not assignable to parameter of type 'Type<MyService> | InjectionToken<MyService>'.

¿Cuál es la forma correcta de usar el inyector para evitar errores de desaprobación?

Editar: vea la respuesta a continuación, para la actualización de Angular9.

Editar: parece estar relacionado con que MyService sea una clase abstracta. Si uso una clase no abstracta, la .get<T>(T) funciona.

Editar: Aparentemente, la solución está pendiente de algún trabajo de relaciones públicas: https://github.com/angular/angular/pull/25222

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Mejor puede intentar convertir su servicio como Tipo y luego usar un inyector como este:

 import { Type } from '@angular/core'; fixture.debugElement.injector.get<MyService>(MyService as Type<MyService>)
over 4 years ago · Santiago Trujillo Report

0

ACTUALIZACIÓN: para Angular9, la sintaxis ha cambiado a esto:

TestBed.inject<IDataService>(IDataService) .

Esto también funciona para clases abstractas.

En VSCode, puede arreglar la mayoría de sus casos con esto

 FIND: TestBed.get\(([^\)]+)\) as .*; REPLACE: TestBed.inject<$1>($1);

PRE Angular 9. Por lo tanto, parece estar relacionado con clases abstractas frente a clases no abstractas.

He publicado mis hallazgos aquí: https://github.com/angular/angular/issues/22063 en caso de que alguien tenga el mismo problema.

over 4 years ago · Santiago Trujillo Report

0

Como una solución temporal, puede intentar lo siguiente:

fixture.debugElement.injector.get<MyService>(MyService as any)

over 4 years ago · Santiago Trujillo 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!