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