Я извлек образец кода шаблона из этого руководства и сделал два следующих шага, чтобы начать работу:
npm install // worked fine and created node_modules folder with all dependencies
npm start
// не удалось с ошибкой ниже -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 '<T, 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'. npm ERR! code ELIFECYCLE npm ERR! errno 2
Я вижу, что в теме.d.ts объявление подъема выглядит следующим образом:
lift<T, R>(operator: Operator<T, R>): Observable<T>;
И в Observable.ts он определяется следующим образом:
lift<R>(operator: Operator<T, R>): Observable<R> {
Примечание: - 1. Я новичок в Angular2 и пытаюсь разобраться во всем.
Ошибка может быть связана с несовместимыми определениями метода подъема.
Я прочитал эту ветку на github
Если мне нужно установить другую версию rxjs, расскажите, пожалуйста, как удалить и установить правильный rxjs.
Edit1: Возможно, я немного запоздал с ответом здесь, но я все равно получаю ту же ошибку даже после использования машинописного текста 2.3.4 или rxjs 6 alpha . Ниже мой package.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"
}
}
angular
typescript
rxjs
Deepak S
источник
источник
Ответы:
В соответствии с этим вам нужно обновить typescript 2.3.4 или rxjs 6 alpha
перейдите к файлу package.json в вашем проекте, обновите typescript или версию rxjs. пример
"typescript": "2.3.4"
делать
npm install
обновление (29.06.2017): -
Согласно
"2.4.0"
работам машинописного текста комментариев .источник
"typescript": "^2.3.4"
будет соответствовать 2.4.1, а 2.4 - это версия, в которой обнаружена проблема с RxJS."typescript": "2.3.0"
и"rxjs": "5.4.1"
сработала для меняКак отмечали другие, эта проблема возникла в результате более строгой проверки типов универсальных шаблонов, представленных в TypeScript 2.4. Это выявило несоответствие в определении типа RxJS и, следовательно, было исправлено в версии RxJS 5.4.2 . Итак, идеальное решение - просто перейти на версию 5.4.2.
Если вы по какой-то причине не можете выполнить обновление до 5.4.2, вам следует вместо этого использовать решение Алана Хаддада по расширению объявления типа, чтобы исправить это для вашего собственного проекта. Т.е. добавьте этот фрагмент в свое приложение:
// 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<T> { lift<R>(operator: Operator<T, R>): Observable<R>; } }
Его раствор не оставит никаких других побочных эффектов и, таким образом, великолепен. Альтернативно предлагаемые решения имеют больше побочных эффектов для настройки вашего проекта и поэтому менее идеальны:
--noStrictGenericChecks
. Однако это сделает его менее строгим для вашего собственного приложения, что вы можете сделать, но может привести к несогласованным определениям типов, как это было в этом экземпляре RxJS, что, в свою очередь, может привести к большему количеству ошибок в вашем приложении.источник
Допустимый подход к лечению заключается в добавлении следующего в ваш файл tsconfig.json до тех пор, пока сотрудники RxJS не решат, что они хотят делать с ошибкой при использовании TypeScript 2.4.1:
"compilerOptions": { "skipLibCheck": true, }
источник
skipLibCheck
. Если вы делаете это, вы потенциально можете упускать из виду другие проблемы. Лучшее решение -noStrictGenericChecks
до обновления RxJS.Вы можете временно обойти проблему, используя расширение модуля
Следующий код решил проблему для меня. Как только у 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<T> { lift<R>(operator: Operator<T, R>): Observable<R>; } }
Хотя, возможно, иронично, что сам RxJS так интенсивно использует эту технику для описания своей собственной формы, на самом деле она обычно применима к множеству проблем.
Хотя, безусловно, существуют ограничения и острые углы, часть того, что делает эту технику мощной, заключается в том, что мы можем использовать ее для улучшения существующих объявлений, делая их более безопасными по типу без разветвления и поддержки всего файла.
источник
"paths"
in,tsconfig.json
чтобы явно указать, где"rxjs"
и"rxjs/*"
должно разрешаться для проверки типов. Однако наличие нескольких версий может вызвать проблемы во время выполнения. Даже если вы не будете использоватьinstanceof
и другие подобные тесты, ваши исследования могут быть менее принципиальными. Лучше всего открыть проблему с videogular2, предлагающую изменить 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 обслуживают его работу.источник
Просто немного деталей, чтобы попытаться вложить в мои два цента.
Проблема возникает, когда мы обновляем Typescript до последней версии, которая на данный момент была TypeScript 2.4.1 , ["так как мы любим обновления :) "], и, как отметил @ Jonnysai в своем ответе и приведенной там ссылке, есть подробное обсуждение проблемы и ее исправлений.
Итак, что работал для меня:
1. Я должен был Un установить машинопись 2.4.1 первых, перейдя в Панель управления > Программы и компоненты ...
2. Установить, заново, машинопись 2.4.0 , а затем убедитесь в
package.json
файл, у вас есть эта конфигурация, как упоминалось здесь в более короткой детали. Вы можете скачать машинопись 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
файла:кому:
Тип возврата, вероятно, должен быть,
Observable<R>
а неObservable<T>
источник
Оставьте параметр noStrictGeneric истинным в файле tsconfig.config
{ "compilerOptions": { "noStrictGenericChecks": true } }
источник
Добавьте «noStrictGenericChecks»: true в файл tsconfig.json в узел «compilerOptions», как показано на изображении и приложении сборки ниже. Я столкнулся с такой же ошибкой после добавления этой ошибки.
источник
Я обнаружил ту же проблему и решил ее, используя «rxjs»: «5.4.1» , «typescript»: «~ 2.4.0» и добавив «noStrictGenericChecks»: true в tsconfig.json.
источник
В RxJS 6 это будет исправлено, но в качестве временного решения вы можете использовать параметр
noStrictGenericChecks
компилятора.В
tsconfig.json
, положить его вcompilerOptions
и установить его в действительности.{ "compilerOptions": { "noStrictGenericChecks": true } }
В командной строке это
--noStrictGenericChecks
.Почему это происходит:
TypeScript 2.4 имеет изменение строгости, и Subject не поднимается до правильного Observable. Подпись действительно должна была быть
Это будет исправлено в RxJS 6.
источник
Перейдите в файл Package.json и измените конфигурацию ниже.
... "rxjs": "5.4.1", "typescript": "~2.4.0" ...
Это сработает
источник
Однако использование только вышеуказанного не помогло, используя следующий подход: Как мне обойти эту ошибку «Субъект неправильно расширяет наблюдаемый» в TypeScript 2.4 и RxJs 5
решил проблемы. Там также упоминается, что проблема была исправлена в RxJs 6, так что это скорее временное исправление, которое помогло мне успешно запустить этот замечательный пример (который ранее скомпилировался, но давал ошибку во время загрузки): Разработка приложения Angular 4 с Bootstrap 4 и TypeScript
источник
переустановка rxjs -> npm install rxjs @ 6 rxjs-compat @ 6 --save
источник
Теперь нам не нужен модуль ionic-native - нам нужен только @ ionic-native / core. Бежать
Это решит вашу проблему ..
источник
просто добавь
"noStrictGenericChecks": true
в ваш tsconfig.json
источник
спасибо за ответ zmag и Рахул Шарма, все работает! @zmag @ Рахул Шарма
"rxjs": "5.4.1", "typescript": "~2.4.0"
моя проблема заключается в следующем:
typings/globals/core-js/index.d.ts:3:14 - error TS2300: Duplicate identifier
Внесите изменения как.
Перейдите в файл Package.json и измените конфигурацию ниже.
"rxjs": "5.4.1", "typescript": "~2.4.0"
источник
да, проблема была с TypeScript 2.4.1. Я только что удалил его из панели управления, и он работает для меня, поскольку в Visual Studio 2017 он уже есть.
источник