Typescript模块在同一个文件中以不同方式解析'rxjs'
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Typescript模块在同一个文件中以不同方式解析'rxjs'相关的知识,希望对你有一定的参考价值。
我花了好几个小时绕圈子,所以有时间去讨论另一个模糊的问题。
我在lerna
单声道回购中,有两个子项目,ProjectA
和ProjectB
。
ProjectA
依赖于rxjs
,ProjectB
也是如此。
ProjectB
依赖于ProjectA
,lerna
通过使用符号链接进行管理。
问题是,在ProjectB
,我有一个文件,它执行以下导入:
import { Subject } from 'rxjs/Subject'
import { Observable } from "rxjs/Observable";
在该文件中,有一个类有一个私有变量,它是一个Subject
,它将它暴露为Observable
。但是,tsc抱怨以下错误:
类型'
Subject<ActionRequestResult<any>>
'不能指定为'Observable<ActionRequestResult<any>>
'类型。属性'source'受到保护,但类型'Observable<T>
'不是源自'Observable<T>
'的类。
经过调查,结果发现文件顶部的两个rxjs
导入实际上是从两个不同的位置导入的。所以尽管Subject
扩展了Observable
,但是在我的文件中导入和引用的Observable
不一样。
我试图在rxjs
文件所在的根项目级别安装lerna.json
。但ProjectB
依赖于webpack-cli
,它对rxjs
也具有传递依赖性,因此它仍然被安装到ProjectB
中。
所以我不确定去哪里,或者这是不是一个错误?
ProjectA
在内部使用Subject
,所以我怀疑打字稿是在项目树上行走并缓存每个东西的位置,这在我所处的情况下是打破的。
有什么想法或建议吗?
管理通过切换我的import语句的顺序来修复它。我相信这是一个与Typescript语言服务及其缓存方式相关的错误。我很快就会提交一个问题。
基本上,我有这个:
import { Something } from 'ProjectA';
import { Subject } from 'rxjs/Subject';
import { Observable } from "rxjs/Observable";
因为ProjectA
引用了Subject
,语言服务显然会缓存它,所以当我自己导入它时,它使用它已有的引用。
将ProjectA
导入移到最后解决了这个问题:
import { Subject } from 'rxjs/Subject';
import { Observable } from "rxjs/Observable";
import { Something } from 'ProjectA';
以上是关于Typescript模块在同一个文件中以不同方式解析'rxjs'的主要内容,如果未能解决你的问题,请参考以下文章