'Observable <T>' ist keine von 'Observable <T>' abgeleitete Klasse
Wenn versucht wird, eine Klasse von einer Klasse in einem @ zu erweitenode_modules
Der Typoskript-Compiler gibt einen Fehler aus:
Property 'source' is protected but type 'Observable<T>' is not a class derived from 'Observable<T>'.
Dies geschieht nur, wenn die Basisklasse von einem @ stamnode_module
.
Die Basisklasse sieht wie folgt aus:
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'));
}
}
Subclassing es in einem Projekt:
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();
}
}
Wenn die Basisklasse TestBase
) wird aus dem @ verschobnode_module
zum Projekt selbst und ändere den Import so, dass er wie @ aussieimport {TestBase} from "./base";
Der Fehler verschwindet.
Liegt dies daran, dass die Kompilierung die Typen für jedes Modul in unterschiedlichen Bereichen erstellt? Ich bin hier völlig verloren.
Aktualisieren
Dies scheint nur beim Verlinken des @ zu passiernode_modules
mitnpm link
. Scheint, als ob eine mögliche Problemumgehung im Moment darin besteht, einen Typ in der Basisklasse zurückzugeben, um eine Schnittstelle zurückzugeben.
Weitere Informationen finden Sie hier: