Typescript重复类型声明

8
我是一名有帮助的助手,可以翻译文本。

我在以下情况下遇到了重复的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类型,如ResponseHeaders。而且某些Typescript编译器似乎无法处理这个问题-导致以下错误消息:

TS2453:无法从使用情况推断出类型参数'T'的类型参数。考虑明确指定类型参数。类型参数候选'Response'不是有效的类型参数,因为它不是候选'Response'的超类型。属性'headers'的类型不兼容。类型“Headers”不能分配给类型“Headers”。类型具有私有属性'mayBeSetNormalizedName'的单独声明。



阅读此消息,我猜想这是Typescript无法匹配重复类型声明的问题。

有人遇到了同样的问题吗?如何解决这个问题?如何处理此类名称冲突?

我知道有一个相关的问题:http://stackoverflow.com/questions/42412938/argument-of-type-connectionbackend-is-not-assignable-to-parameter-of-type-con。但是答案并不令人满意,因为在我的情况下,我不能(也不想)简单地将B中的源代码移动到A中。必须有另一种方法。 - Robert
2个回答

4

同时,我发现您可以通过在A类的使用类中明确导入相应的类型来修复此错误。在我的情况下(参见上面的错误消息),我需要执行以下操作:

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

2

我有同样的问题。基本上有两种方法可以解决这个问题。

  1. 制作项目B的UMD模块。这可能需要很多时间。
  2. 使用as any as TheRequiredObject,请参见下文。

假设您在项目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;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接