При попытке расширения класса из класса в node_modules
компилятор typescript генерирует ошибку:
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";
Ошибка исчезнет.
Это связано с тем, что компиляторы создают типы в разных областях для каждого модуля? Я здесь полностью потерян.
Update:
Это происходит только при связывании node_modules
с npm link
.
Кажется, что одно возможное обходное решение на данный момент - это вместо того, чтобы возвращать тип в базовом классе для возврата интерфейса.
Более подробную информацию можно найти здесь: