Как мне обойти эту ошибку "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
}
}