派生的類當試圖從一個類中node_modules
打字稿編譯器拋出一個錯誤擴展類的說法:「可觀察<T>」不是從「可觀察<T>」
Property 'source' is protected but type 'Observable<T>' is not a class derived from 'Observable<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
移動到項目它的自我與改變導入看起來像 import {TestBase} from "./base";
錯誤消失。
這是由於編譯創建每個模塊的不同範圍的類型?我完全迷失在這裏。
更新:
這似乎與npm link
鏈接node_modules
時纔會發生。 似乎有一種可能的解決方法,就是不用返回基類中的類型來返回接口。
更多信息可以在這裏找到:
https://github.com/Microsoft/TypeScript/issues/6496
https://github.com/ReactiveX/rxjs/issues/1744
我認爲你是對的。您不能擴展具有全局/環境範圍的類。 [Typescript GitHub repo上的此線程](https://github.com/Microsoft/TypeScript/issues/3282)似乎描述了一些解決方法。 – morphatic
即使沒有'npm link',我也有這個問題。我嘗試使用'npm pack'和'npm install'作爲解決方法,但沒有骰子。 https://github.com/robertjd/sp-ng2/pull/1 –
@Maxime Raineville的答案爲我工作 – vincecampanale