Quando si cerca di estendere una classe da una classe in un node_modules
il compilatore dattiloscritto getta un errore che dice:'osservabile <T>' non è una classe derivata da 'osservabile <T>'
Property 'source' is protected but type 'Observable<T>' is not a class derived from 'Observable<T>'.
Questo accade solo quando la classe base è da node_module
.
La classe di base si presenta come:
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'));
}
}
sottoclasse in un progetto:
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();
}
}
Se la classe di base (TestBase
) viene spostato dal node_module
al progetto è di per sé e cambiare la importare come import {TestBase} from "./base";
L'errore scompare.
Ciò è dovuto al fatto che la compilazione crea i tipi in ambiti diversi per ciascun modulo? Sono completamente perso qui.
Aggiornamento:
Questo sembra accadere solo quando collega la node_modules
con npm link
. Sembra che una possibile soluzione alternativa per il momento sia quella di restituire un tipo nella classe base per restituire un'interfaccia.
Maggiori informazioni possono essere trovate qui:
https://github.com/Microsoft/TypeScript/issues/6496
https://github.com/ReactiveX/rxjs/issues/1744
Penso che tu abbia ragione. Non è possibile estendere classi con ambito globale/ambientale. [Questo thread sul repository GitHub di Typescript] (https://github.com/Microsoft/TypeScript/issues/3282) sembra descrivere alcuni accorgimenti. – morphatic
Sto riscontrando questo problema anche senza 'npm link'. Ho provato a usare 'npm pack' e' npm install' come soluzione, ma senza dadi. https://github.com/robertjd/sp-ng2/pull/1 –
@Maxime La risposta di Raineville ha funzionato per me – vincecampanale