Tengo problemas con las declaraciones de tipos de mecanografiados duplicados en el siguiente caso:
Tengo el siguiente árbol de dependencias para mi aplicación A:
A->@angular/http:2.3.1 A->B->@angular/http:2.3.1
Tanto A como B son administrados por npm. despues de correr
npm install
el sistema de archivos se ve así:
A/node_modules/ @angular/http ... B/node_modules @angular/http
El problema parece ser que ahora hay dos tipos de declaraciones de tipos @angular/http como Response o Headers . Y de alguna manera, el transpilador de TypeScript parece incapaz de manejar eso, lo que da como resultado el siguiente mensaje de error:
TS2453:El argumento de tipo para el parámetro de tipo 'T' no se puede deducir del uso. Considere especificar los argumentos de tipo explícitamente. El argumento de tipo candidato 'Respuesta' no es un argumento de tipo válido porque no es un supertipo del candidato 'Respuesta'. Los tipos de 'encabezados' de propiedad son incompatibles. El tipo 'Encabezados' no se puede asignar al tipo 'Encabezados'. Los tipos tienen declaraciones separadas de una propiedad privada 'mayBeSetNormalizedName'.
Al leer el mensaje, supongo que esto es un problema de Typescript que no puede hacer coincidir las declaraciones de tipo duplicadas.
¿Alguien experimentó el mismo problema? ¿Cómo manejar ese problema? ¿Cómo manejar tales colisiones de nombres?
Mientras tanto, descubrí que puede corregir este error importando explícitamente los tipos correspondientes dentro de la clase de uso de A. En mi caso (consulte el mensaje de error anterior), necesitaba:
import {Response, Headers} from '@angular/http';
Yo tuve el mismo problema. Básicamente hay dos formas de resolver esto.
as any as TheRequiredObject
ver más abajo.Supongamos que tienes esta clase en el proyecto b:
export class B{ getSome(): Observable { return this.http.get('some_url'); } }
y esto es lo que quieres en el proyecto a:
export class A{ getSomeFromB: Observable{ return B.getSome() as any as Observable; } }