打字稿重复类型声明

时间:2017-03-20 17:11:23

标签: javascript angular typescript npm

在以下情况下,我遇到了重复的Typescript类型声明问题:

我的应用程序A:

有以下依赖关系树
A->@angular/http:2.3.1
A->B->@angular/http:2.3.1

A和B都由npm管理。运行后

npm install

文件系统如下所示:

A/node_modules/
  @angular/http
  ...
  B/node_modules
     @angular/http

问题似乎是现在有两种@ angular / http类型的类型声明,例如 Response Headers 。并且不知何故,Typescript转换器似乎无法处理 - 导致以下错误消息:

  

TS2453:类型参数的类型参数' T'无法推断   从用法。考虑明确指定类型参数。   输入参数候选者'响应'不是有效的类型参数   因为它不是候选人的超级类型' Response'。种类   财产'标题'是不相容的。输入'标题'不可分配   输入' Headers'。类型具有私有的单独声明   property' mayBeSetNormalizedName'。

阅读消息,我想这是一个不能匹配重复类型声明的Typescript的hickup。

有人遇到过同样的问题吗?如何处理这个问题?如何处理这样的名称冲突?

2 个答案:

答案 0 :(得分:4)

同时我发现你可以通过在A的using类中显式导入相应类型来修复这个错误。在我的情况下(上面的cp。错误信息),我需要:

import {Response, Headers} from '@angular/http';

答案 1 :(得分:1)

我遇到了同样的问题。基本上有两种解决方法。

  1. 制作项目B的UMD模块。这可能需要很长时间
  2. 使用as any as TheRequiredObject见下文。
  3. 假设你在项目b中得到了这个类:

    export class B{
        getSome(): Observable {
            return this.http.get('some_url');
        }
    }
    

    这就是你想要的项目a:

    export class A{
        getSomeFromB: Observable{
            return B.getSome() as any as Observable;
        }
    }