rxjs / Subject.d.ts error: Class ‘Subject ‘ неправильно расширяет базовый class ‘Observable ‘

Я извлек шаблон шаблона шаблона из https://github.com/gopinav/Angular-2-Tutorials и сделал ниже двух шагов для начала работы –

  1. npm install // worked fine and created node_modules folder with all dependencies
  2. npm start // не удалось с ошибкой ниже,

    node_modules / rxjs / Subject.d.ts (16,22): ошибка TS2415: class «Тема» неправильно расширяет базовый class «Наблюдаемый». Типы собственности «лифт» несовместимы. Тип ‘(оператор: оператор) => Наблюдаемый’ не присваивается
    to type ‘(operator: Operator) => Observable’. Тип «Observable» не присваивается типу «Observable». Тип ‘T’ не присваивается типу ‘R’. npm ERR! код ELIFECYCLE npm ERR! errno 2

Я вижу, что в subject.d.ts декларация лифта ниже:

  lift(operator: Operator): Observable; 

И в Observable.ts он определяется как ниже-

  lift(operator: Operator): Observable { 

Примечание: – 1. Я новичок в Angular2 и пытаюсь заполучить вещи.

  1. Ошибка может быть вызвана несовместимыми определениями метода подъема

  2. Я читаю https://github.com/Microsoft/TypeScript/issues/2073

  3. Если мне нужно установить некоторую другую версию rxjs, то, пожалуйста, расскажите, как удалить и установить правильные rxjs.

Edit1: Возможно, мне немного поздно ответить, но я все равно получаю такую ​​же ошибку даже после использования typescript 2.3.4 или rxjs 6 alpha . Ниже мой пакет.json,

 { "name": "angular-quickstart", "version": "1.0.0", "scripts": { "start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\" ", "lite": "lite-server", "postinstall": "typings install", "tsc": "tsc", "tsc:w": "tsc -w", "typings": "typings" }, "license": "ISC", "dependencies": { "@angular/common": "2.0.0", "@angular/compiler": "2.0.0", "@angular/core": "2.0.0", "@angular/forms": "2.0.0", "@angular/http": "2.0.0", "@angular/platform-browser": "2.0.0", "@angular/platform-browser-dynamic": "2.0.0", "@angular/router": "3.0.0", "@angular/upgrade": "2.0.0", "core-js": "^2.4.1", "reflect-metadata": "^0.1.3", "rxjs": "6.0.0-alpha.0", "systemjs": "0.19.27", "zone.js": "^0.6.23", "angular2-in-memory-web-api": "0.0.20", "bootstrap": "^3.3.6" }, "devDependencies": { "concurrently": "^2.2.0", "lite-server": "^2.2.2", "typescript": "2.3.4", "typings": "^1.3.2" } } 

В соответствии с этим вам нужно обновить машинописный файл 2.3.4 или rxjs 6 alpha

перейдите в файл package.json в своей версии для создания файлов или rxjs. пример

 "typescript": "2.3.4" 

сделать npm install

Обновление (06/29/2017): –

В соответствии с комментариями машинописный текст "2.4.0" .

Как отмечали другие, этот вопрос возник как следствие более строгой проверки типов дженериков, введенных в TypeScript 2.4. Это выявило несогласованность в определении типа RxJS и, следовательно, было исправлено в версии 5.4.2 RxJS . Поэтому идеальным решением является просто перейти на 5.4.2.

Если вы по какой-то причине не можете перейти на 5.4.2, вы должны вместо этого использовать решение Alan Haddad по расширению объявления типа, чтобы исправить его для вашего собственного проекта. Т.е. добавьте этот fragment в свое приложение:

 // TODO: Remove this when RxJS releases a stable version with a correct declaration of `Subject`. import { Operator } from 'rxjs/Operator'; import { Observable } from 'rxjs/Observable'; declare module 'rxjs/Subject' { interface Subject { lift(operator: Operator): Observable; } } 

Его решение не оставит никаких побочных эффектов и, таким образом, великолепен. Альтернативно предлагаемые решения имеют больше побочных эффектов для настройки вашего проекта и, следовательно, менее идеальны:

  • отключите более строгие общие проверки с помощью флага компилятора --noStrictGenericChecks . Это, однако, сделает его менее строгим для вашего собственного приложения, которое вы можете сделать, но может ввести несовместимые определения типов, как это было в этом экземпляре RxJS, что, в свою очередь, может привести к появлению большего количества ошибок в вашем приложении.
  • Не проверять типы в библиотеках с флагом –skipLibCheck установлен на значение true. Это не идеально, потому что вы не можете сообщить о некоторых ошибках типа.
  • Обновление до RxJS 6 Alpha – учитывая, что есть изменения, это может сломать ваше приложение плохо документированными способами, поскольку он все еще находится в альфе. Кроме того, если у вас есть другие зависимости, такие как Angular 2+, это не может быть действительно поддерживаемым вариантом, нарушая сам фрейм сейчас или вниз по линии. Я думаю, что это еще сложнее решить.

Принятый метод групповой помощи заключается в добавлении следующего в ваш файл tsconfig.json, пока люди RxJS не решат, что они хотят делать с ошибкой при использовании TypeScript 2.4.1:

 "compilerOptions": { "skipLibCheck": true, } 

Вы можете временно обойти проблему с помощью модуля расширения

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

 // augmentations.ts import {Operator} from 'rxjs/Operator'; import {Observable} from 'rxjs/Observable'; // TODO: Remove this when a stable release of RxJS without the bug is available. declare module 'rxjs/Subject' { interface Subject { lift(operator: Operator): Observable; } } 

Хотя, пожалуй, иронично, что сам RxJS делает такое интенсивное использование этой техники для описания своей собственной формы, она фактически применима к множеству проблем.

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

 "dependencies": { "@angular/animations": "^4.3.1", "@angular/common": "^4.3.1", "@angular/compiler": "^4.3.1", "@angular/compiler-cli": "^4.3.1", "@angular/core": "^4.3.1", "@angular/forms": "^4.3.1", "@angular/http": "^4.3.1", "@angular/platform-browser": "^4.3.1", "@angular/platform-browser-dynamic": "^4.3.1", "@angular/platform-server": "^4.3.1", "@angular/router": "^4.3.1", "core-js": "^2.4.1", "rxjs": "^5.4.2", "ts-helpers": "^1.1.1", "zone.js": "^0.7.2" }, "devDependencies": { "@angular/compiler-cli": "^2.3.1", "@types/jasmine": "2.5.38", "@types/node": "^6.0.42", "angular-cli": "1.0.0-beta.28.3", "codelyzer": "~2.0.0-beta.1", "jasmine-core": "2.5.2", "jasmine-spec-reporter": "2.5.0", "karma": "1.2.0", "karma-chrome-launcher": "^2.0.0", "karma-cli": "^1.0.1", "karma-jasmine": "^1.0.2", "karma-remap-istanbul": "^0.2.1", "protractor": "~4.0.13", "ts-node": "1.2.1", "tslint": "^4.3.0", "typescript": "^2.3.4", "typings": "^1.3.2" } 

в package.json "rxjs": "^5.4.2", и «typescript»: «^ 2.3.4», затем npm install и ng служат для работы.

Просто немного деталей, пытаясь положить мои два цента.

Проблема возникает, когда мы обновляем TypScript до последней версии, которая теперь была TypeScript 2.4.1 , [«так как мы любим обновления 🙂 »], и, как упоминал @ Jonnysai в его ответе и предоставленной там ссылке, есть подробное обсуждение проблемы и ее исправлений.

Итак, что сработало для меня:
1. Мне пришлось сначала установить TypeScript 2.4.1 , перейдя в Панель управления > Программы и компоненты …
2. Установите, обновите, TypeScript 2.4.0 , а затем убедитесь, что в файле package.json вас есть это

введите описание изображения здесь
конфигурации, как указано здесь, в более короткой детали.

Вы можете скачать TypeScript 2.4.0 отсюда , для Visual Studio 2015

Вы можете временно использовать флаг --noStrictGenericChecks чтобы обойти это в TypeScript 2.4.

Это --noStrictGenericChecks в командной строке или просто "noStrictGenericChecks": true в поле "compilerOptions" в tsconfig.json .

Имейте в виду, что RxJS 6 будет исправлен.

См. Этот аналогичный вопрос: как обойти эту ошибку в RxJS 5.x в TypeScript 2.4?

Измените следующую строку в файле Subject.d.ts :

 lift(operator: Operator): Observable; 

чтобы:

 lift(operator: Operator): Observable; 

Тип возврата должен, вероятно, быть Observable а не Observable

Сохранять параметр noStrictGeneric true в файле tsconfig.config

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

Я нашел ту же проблему, и я решил ее, используя «rxjs»: «5.4.1» , «typescript»: «~ 2.4.0» и добавив «noStrictGenericChecks»: true в tsconfig.json.

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

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

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

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

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

TypeScript 2.4 имеет строгость, и Subject не поднимается до правильного Наблюдаемого. Подпись действительно должна была быть

(оператор: оператор) => Наблюдаемый

Это будет зафиксировано в RxJS 6.

Добавьте «noStrictGenericChecks»: true в файле tsconfig.json в узле «compilerOptions», как показано ниже в приложении image & build. Я столкнулся с такой же ошибкой после добавления этой ошибки. введите описание изображения здесь

Однако использование вышеописанного не помогло, используя следующий подход: как мне обойти эту ошибку «Subject неправильно расширяет Observable» в TypeScript 2.4 и RxJs 5

решили проблемы. Здесь также упоминается, что проблема исправлена ​​в RxJs 6, поэтому это скорее временное исправление, которое помогло мне успешно запустить этот замечательный пример (который был скомпилирован ранее, но дал ошибку во время загрузки): разработка приложений Angular 4 с Bootstrap 4 и TypeScript

переустановка rxjs -> npm install rxjs @ 6 rxjs-compat @ 6 –save

да проблема была в TypeScript 2.4.1. Я просто удаляю это из панели управления, и это работает для меня, поскольку Visual Studio 2017 уже это.

  • Маршрутизатор Angular2, получить данные маршрута с URL-адреса, отобразить панировочные сухари
  • Как использовать jQuery с угловым?
  • Угловой 2 - Выполнить код при закрытии windows
  • DI с циклической зависимостью от пользовательских HTTP и ConfigService
  • jQuery не определен в bootstrap-sass
  • Как обслуживать изображения в Angular2?
  • Угловой 2 CLI огромный пакет поставщиков: как улучшить размер для prod?
  • Должен ли я писать методы как функции стрелок в classе Углового
  • Angular2 http.post выполняется дважды
  • угловая ng-init альтернатива в угловом 2
  • В RC.1 некоторые стили нельзя добавить с помощью синтаксиса привязки
  • Interesting Posts

    Что означают флагов и Reqs в uTorrent?

    Эффект безопасного рабочего режима для Java-приложения

    Условный список itemtemplate или datatemplate в WPF

    Получение информации о последовательном порту

    Масштабирование DPI в Windows 8.1 с помощью командной строки

    Как преобразовать String в эквивалентное дерево выражений LINQ?

    Как заставить sudo сохранять переменные среды?

    Недопустимый сетевой диск с моим компьютером и проводником

    Ошибка API-интерфейса Asp.Net: тип «ObjectContent`1» не смог сериализовать тело ответа для типа контента «application / xml»; кодировка = UTF-8′

    Ошибка Crystal Report с IIS – (bobj не определено, отчет Crystal не отображается)

    BigInteger: подсчитывает количество десятичных цифр в масштабируемом методе

    Как использовать std :: sort для сортировки массива в C ++

    Обрезка огромного (3,5 ГБ) файла csv для чтения в R

    В Oracle можно ли вставить или ОБНОВИТЬ запись через представление?

    Вызов веб-служб REST с classической страницы asp

    Давайте будем гением компьютера.