Как мне обойти эту ошибку "Subject неправильно расширяет Observable" в TypeScript 2.4 и RxJS 5.x?

Когда я компилирую, я получаю следующую ошибку компилятора в файлах объявлений RxJS:

node_modules/rxjs/Subject.d.ts(16,22): error TS2415: Class 'Subject<T>' incorrectly extends base class 'Observable<T>'.
  Types of property 'lift' are incompatible.
    Type '<R>(operator: Operator<T, R>) => Observable<T>' is not assignable to type '<R>(operator: Operator<T, R>) => Observable<R>'.
      Type 'Observable<T>' is not assignable to type 'Observable<R>'.
         Type 'T' is not assignable to type 'R'.

Что происходит здесь, и как мне обойти это без перехода на TypeScript 2.3 или ранее?

Ответ 1

Решение

RxJS 5.4.2 теперь должен прекрасно работать с TypeScript 2.4.1. Просто обновите до 5.4. 2+, если это возможно.

npm install --save [email protected]^5.4.2

Если нет, то приведенное ниже решение должно работать.

Почему это происходит

TypeScript 2.4 имеет изменение строгости, и Subject<T> не поднимается до правильного Observable. Подпись действительно должна была быть

<R>(operator: Operator<T, R>) => Observable<R>

Это будет исправлено в RxJS 6.

Альтернативное решение

В новых версиях RxJS это будет исправлено, но в качестве временного решения вы можете использовать noStrictGenericChecks компилятора noStrictGenericChecks.

В tsconfig.json поместите его в "compilerOptions" и установите для него значение true.

{
    "compilerOptions": {
        "noStrictGenericChecks": true
    }
}

В командной строке это --noStrictGenericChecks.

Ответ 2

Сегодня мы столкнулись с этой ошибкой и решили это с помощью трех шагов. Поэтому, разделяя это с надеждой, это поможет другим.

Шаг 1: В файле package.json измените запись как "rxjs": "5.4.2",

Шаг 2: Удалите папку node_modules из проекта, которая присутствует в корневом каталоге

Шаг 3: Теперь щелкните правой кнопкой мыши файл package.json и нажмите "Восстановить", как показано ниже:  введите описание изображения здесь

Примечание.. Он снова создаст папку node_module с новыми файлами. Теперь создайте решение, надеюсь, вы не должны получать никаких ошибок сборки, связанных с указанной выше проблемой.

Ответ 3

добавлять

"noStrictGenericChecks": true

в файле tsconfig.json

Ответ 4

Я сделал следующие два изменения в файле package.json.

1) изменил версию rxjs на 5.4.1 в разделе зависимостей.

"зависимость":  {
       "rxjs": "5.4.1"  }

2) изменил версию typescript на 2.4.0 в разделе devDependencies.

"devDependencies": {        "typescript": "2.4.0"   }

Я выполнил команду npm install "после внесения двух изменений и сработал.

Ответ 5

В вашем предметном классе:

изменить эту строку:

lift<R>(operator: Operator<T, R>): Observable<T>;

к:

lift<R>(operator: Operator<T, R>): Observable<R>;

Ответ 6

Я сделал следующие изменения в файле package.json.

 "dependencies": {
    "@angular/animations": "4.1.3",
    "@angular/common": "4.4.6",
    "@angular/compiler": "4.4.6",
    "@angular/compiler-cli": "2.4.8",
    "@angular/core": "4.4.6",
    "@angular/forms": "4.4.6",
    "@angular/http": "4.4.6",
    "@angular/platform-browser": "4.4.6",
    "@angular/platform-browser-dynamic": "4.4.6",
    "@angular/platform-server": "4.4.6",
    "@angular/router": "4.4.6",
    "@ionic/storage": "2.0.0",
    "cordova-plugin-console": "1.0.5",
    "cordova-plugin-device": "1.1.4",
    "cordova-plugin-splashscreen": "~4.0.1",
    "cordova-plugin-statusbar": "2.2.1",
    "cordova-plugin-whitelist": "1.3.1",
    "ionic-angular": "2.2.0",
    "ionic-native": "2.4.1",
    "ionic-plugin-keyboard": "~2.2.1",
    "ionic-tooltips": "^2.0.0",
    "ionicons": "3.0.0",
    "rxjs": "^5.4.2",
    "sw-toolbox": "3.4.0",
    "typescript": "2.4.0",
    "zone.js": "0.7.2"
  }

Изменения в версиях rxjs и typescript.

Ответ 7

Это проблема несоответствия между rxjs и typscript, используя "rxjs": "5.4.2" и "typcript": "~ 2.3.4" мне подходит

Ответ 8

Я столкнулся с той же проблемой и нашел следующий веб-сайт полезным https://www.georgephillipson.com/blog/jquery/setting-up-angular-2-in-visual-studio-2017/, на котором были пошаговые инструкции по настройке up Angular для сайта MVC объяснил, как исправить ошибку, на которую ссылается этот пост, а также ссылку на GitHub с полным кодом.

Я нашел это полезным, поэтому думал, что я дам другим знать

Согласно сообщению Zoes, я добавил больше к тому, почему я думаю, что ссылка может быть полезной

На странице показано, как обновить RxJS для исправления ошибки, также показано, как проверить, установлены ли на вашем компьютере Node и NPM, и объяснено, как добавить TypeScript, затем показано, как настроить файл cshtml для отображения содержимого Angular.

enter image description here

Ответ 9

Построение: Свойство 'lift' в типе 'Subject' нельзя назначить одному и тому же свойству в базовом типе 'Observable'

Построение: свойство 'lift' в типе 'Subject' не может быть назначено одному и тому же свойству в базовом типе 'Observable'.

Свойство 'lift' в типе 'Subject' нельзя назначить тому же свойству в базовом типе 'Observable'. Тип "(оператор: оператор) => наблюдаемый" не может быть назначен типу (оператор: оператор) => наблюдаемый ". Тип "Наблюдаемый" нельзя назначить типу "Наблюдаемый". Тип "T" нельзя назначить типу "R". Виртуальные проекты TypeScript

Удалите node_modules из решения, щелкните правой кнопкой на package.json и выберите восстановление пакетов.

Ответ 10

В tsconfig.json поместите его в "compilerOptions" и установите для него значение true.

{
    "compilerOptions": true,
    "compilerOptions": {
        "noStrictGenericChecks": true
    }
}