Javascript 类型脚本模块解析';rxjs';在同一个文件中不同

Javascript 类型脚本模块解析';rxjs';在同一个文件中不同,javascript,typescript,npm,rxjs,Javascript,Typescript,Npm,Rxjs,我花了几个小时兜圈子,所以是时候问另一个模糊的问题了 我在一个lernamono回购项目中,有两个子项目,ProjectA和ProjectB ProjectA与ProjectB一样依赖于rxjs ProjectB依赖于ProjectA,而lerna使用符号链接进行管理 问题是,在ProjectB中,我有一个文件执行以下导入: import { Subject } from 'rxjs/Subject' import { Observable } from "rxjs/Observable";

我花了几个小时兜圈子,所以是时候问另一个模糊的问题了

我在一个
lerna
mono回购项目中,有两个子项目,
ProjectA
ProjectB

ProjectA
ProjectB
一样依赖于
rxjs

ProjectB
依赖于
ProjectA
,而
lerna
使用符号链接进行管理

问题是,在
ProjectB
中,我有一个文件执行以下导入:

import { Subject } from 'rxjs/Subject'
import { Observable } from "rxjs/Observable";
在该文件中,有一个类有一个私有变量,它是
主题
,并将其公开为一个
可观察的
。但是,tsc抱怨出现以下错误:

类型“
Subject
”不可分配给类型“
Observable
”。 属性“source”受保护,但类型“
Observable
”不是从“
Observable
”派生的类

经过调查,发现文件顶部的两个
rxjs
导入实际上是从两个不同的位置导入的。因此,即使
Subject
扩展了
Observable
,但在我的文件中导入和引用的
Observable
并不相同

我试图在根项目级别安装
rxjs
,即
lerna.json
文件所在的位置。但是
ProjectB
依赖于
webpackcli
,后者也依赖于
rxjs
,因此它仍然可以安装到
ProjectB

所以我不确定该去哪里,或者这是否是一个bug

ProjectA
在内部使用
Subject
,因此我怀疑typescript正在项目树中遍历并缓存每个东西,这在我所处的情况下是一种破坏


有什么想法或建议吗?

通过切换导入语句的顺序,设法解决了这个问题。我相信这是一个与Typescript语言服务及其缓存方式有关的bug。我将很快提交一个问题

基本上,我有这样的想法:

import { Something } from 'ProjectA';
import { Subject } from 'rxjs/Subject';
import { Observable } from "rxjs/Observable";
因为
ProjectA
引用了
Subject
,所以语言服务显然会缓存它,所以当我自己导入时,它会使用它已经拥有的引用

项目A
导入移到末尾解决了问题:

import { Subject } from 'rxjs/Subject';
import { Observable } from "rxjs/Observable";
import { Something } from 'ProjectA';

通常,通过配置tsconfig.json路径参数可以解决此类问题