typescript – ‘Observable’不是派生自’Observable’的类

当尝试从node_modules中的类扩展一个类时,typescript编译器会抛出一个错误:

属性“源”被保护,但键入“Observable< T>不是派生自“可观察< T>”的类。

这仅在基类来自node_module时发生。

基类看起来像:

import {Observable} from "rxjs/Observable";
export abstract class TestBase<T> {

    request(options: any):Observable<T> {
        return Observable.throw(new Error('TestBase is abstract class. Extend it and implement own request method'));
    }
}

在项目中进行子类化:

import {Observable} from "rxjs/Observable";
import {TestBase} from "@org/core";

class SocketResponse {

}

class Socket {
    request(): Observable<SocketResponse> {
        return new Observable.of(new SocketResponse());
    }
}

export class Sub extends TestBase<SocketResponse> {
    request(options:any):Observable<SocketResponse> {
        return new Socket().request();
    }
}

如果基类(TestBase)从node_module移动到项目自身,并将导入更改为外观
从“./base”导入{TestBase};错误消失。

这是因为编译器为每个模块创建不同范围的类型?我完全迷失在这里

更新:

这似乎只有在将node_modules链接到npm链接时才会发生。
似乎像现在的一个可能的解决方法是,而不是返回基类中返回一个接口的类型。

更多信息可以在这里找到:

https://github.com/Microsoft/TypeScript/issues/6496

https://github.com/ReactiveX/rxjs/issues/1744

在开发项目的自定义模块时,我遇到了一个非常类似的问题。我不是100%肯定我们有同样的问题,但它看起来很接近。

我如何解决我的问题

我建议删除您的node_modules文件夹并重新安装所有的依赖项。

rm -rf node_modules/
npm cache clean
npm install

这为我解决了。

有什么问题(我想)

我正在开发的模块有一个主要项目试图扩展的抽象类。然而,当尝试编译主项目时,编译器会抛出同样的错误。

经过一番挖掘,我注意到,在将我的模块安装到我的项目中时,NPM会抱怨一个UNMET PEER DEPENDENCY。当查看项目的node_modules时,我注意到我的模块有另一个node_modules文件夹嵌套在其中,并具有与主项目共享的一些依赖关系。

我不确定这一点,但我认为NPM认为模块期望与主要项目共享的不同版本的依赖关系。

因此,模块中的抽象类从其自己的嵌套node_modules文件夹引用了Observable,而主项目从顶级node_modules文件夹引用了Observable。

更多信息

在尝试解决我的问题时,其他问题提供了一些洞察力:

Why does npm install say I have unmet dependencies?

http://stackoverflow.com/questions/38168581/observablet-is-not-a-class-derived-from-observablet

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:typescript – ‘Observable’不是派生自’Observable’的类