rxjs/Subject.d.ts 오류: 클래스 'Subject'가 기본 클래스 'Observable' 의 확장을 잘못 했습니다.
저는 이 튜토리얼에서 샘플 템플릿 코드를 추출했고 시작하기 위해 아래의 두 단계를 수행했습니다.
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
subject.d.ts에서 리프트 선언은 아래와 같습니다.
lift<T, R>(operator: Operator<T, R>): Observable<T>;
그리고 Observable.ts에서는 다음과 같이 정의됩니다.
lift<R>(operator: Operator<T, R>): Observable<R> {
참고:- 1. Angular2는 처음이고 물건을 잡으려고 노력합니다.
이 오류는 리프트 방법의 정의가 호환되지 않아 발생할 수 있습니다.
만약 제가 다른 버전의 rxjs를 설치해야 한다면 올바른 rxjs를 제거하고 설치하는 방법을 알려주세요.
Edit1: 여기서 응답이 조금 늦어질 수도 있지만 typescript 2.3.4 또는 rxjs 6 alpha를 사용해도 동일한 오류가 발생합니다.아래는 제 소포입니다.제이슨,
{
"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 알파가 필요합니다.
당신의 소포를 가져가세요.프로젝트 업데이트 유형 스크립트 또는 rxjs 버전의 json 파일.예
"typescript": "2.3.4"
하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다npm install
업데이트(06/29/2017):-
스크립트 설명 스트에따름립크유형"2.4.0"
일해.
다른 사람들이 지적했듯이 이 문제는 TypeScript 2.4에 도입된 제네릭의 엄격한 유형 검사의 결과로 발생했습니다.이로 인해 RxJS 유형 정의의 불일치가 드러났고 결과적으로 RxJS 버전 5.4.2에서 수정되었습니다.따라서 이상적인 솔루션은 5.4.2로 업그레이드하는 것입니다.
어떤 이유로 5.4.2로 업그레이드할 수 없는 경우에는 Alan Haddad의 형식 선언을 보강하여 자신의 프로젝트에 맞게 수정하는 솔루션을 사용해야 합니다.즉, 이 스니펫을 앱에 추가합니다.
// 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 인스턴스에서 했던 것처럼 일관되지 않은 유형 정의가 도입되어 앱에 더 많은 버그가 발생할 수 있습니다. - --skipLibCheck가 true로 설정된 라이브러리에서 형식을 확인하지 않습니다.일부 유형 오류가 보고되지 않을 수 있으므로 이 방법도 이상적이지 않습니다.
- RxJS 6 Alpha로 업그레이드 - 깨지는 변경 사항이 있을 경우 앱이 여전히 알파 상태이기 때문에 잘못 문서화된 방식으로 손상될 수 있습니다.또한 Angular 2+와 같은 다른 종속성이 있는 경우에는 프레임워크 자체가 지금 또는 현재 중단되므로 실제로 지원되지 않는 옵션일 수 있습니다.제가 생각하기에 훨씬 더 어려운 문제입니다.
승인된 반창고 접근법은 RxJS 사람들이 TypeScript 2.4.1을 사용할 때 오류에 대해 무엇을 하고 싶은지 결정할 때까지 tsconfig.json 파일에 다음을 추가하는 것입니다.
"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<T> {
lift<R>(operator: Operator<T, R>): Observable<R>;
}
}
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"
}
꾸러미로제이손 "rxjs": "^5.4.2",
그리고 "typscript": "^2.3.4", npm 설치 및 ng가 작동합니다.
제 2센트를 넣기 위해 조금만 더 자세히 말씀드리겠습니다.
Typescript를 TypeScript 2.4.1, ["업그레이드를 사랑하는 대로 :)"] 최신 버전으로 업그레이드할 때 문제가 발생하며, @Jonnysai가 답변 및 제공된 링크에서 언급했듯이 문제와 수정 사항에 대한 자세한 논의가 있습니다.
그래서 제게 효과가 있었던 것은:
먼저 제어판 > 프로그램 및 기능...으로 이동하여 TypeScript 2.4.1을 제거해야 했습니다.
새로 설치하고 스크립트 2.4.0을 입력한 다음package.json
파일, 당신은 이것을 가지고 있습니다.
구성은 여기에서 좀 더 간략하게 설명한 바와 같습니다.
Visual Studio 2015용 TypeScript 2.4.0은 여기에서 다운로드할 수 있습니다.
으로 로사용다있니를 사용할 수 있습니다.--noStrictGenericChecks
TypeScript 2.4에서 이 문제를 해결하기 위한 플래그입니다.
는 이은입니다.--noStrictGenericChecks
행또냥그는."noStrictGenericChecks": true
에 시대에"compilerOptions"
에 출전하다.tsconfig.json
.
RxJS 6은 이 문제를 수정합니다.
이와 유사한 질문을 참조하십시오.TypeScript 2.4의 RxJS 5.x에서 이 오류를 해결하려면 어떻게 해야 합니까?
아래 이미지 및 빌드 응용 프로그램에 표시된 대로 "compilerOptions" 노드 아래에 tsconfig.json 파일에 true를 추가합니다.저는 이 오류를 해결하기 위해 추가한 후에도 같은 오류가 해결되었습니다.
다음 행을 변경하십시오.Subject.d.ts
파일:
lift<R>(operator: Operator<T, R>): Observable<T>;
대상:
lift<R>(operator: Operator<T, R>): Observable<R>;
반환 유형은 다음과 같아야 합니다.Observable<R>
보다는Observable<T>
tsconfig.config 파일에서 noStrictGeneric 옵션 true를 유지합니다.
{
"compilerOptions": {
"noStrictGenericChecks": true
}
}
저는 같은 문제를 발견했고 "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에 엄격성이 변경되었으며 제목이 올바른 Observable로 올라오지 않습니다.서명은 정말 했어야 했습니다.
(계속:작업자) => 관찰 가능
이 문제는 RxJS 6에서 해결됩니다.
패키지로 이동합니다.json 파일을 작성하고 아래 구성을 수정합니다.
...
"rxjs": "5.4.1",
"typescript": "~2.4.0"
...
그건 작동할 것이다.
그러나 위의 방법을 사용하는 것만으로는 다음과 같은 방법을 사용하는 데 도움이 되지 않았습니다.TypeScript 2.4 및 RxJs 5에서 "Subject extends Observable" 오류를 해결하려면 어떻게 해야 합니까?
문제를 해결했습니다.RxJs 6에서 문제가 해결되었다는 것도 여기에 언급되어 있습니다. 따라서 이것은 임시 수정에 가까우며, 이 훌륭한 예제(이전에 컴파일되었지만 로드 시간 동안 오류가 발생함)를 성공적으로 실행하는 데 도움이 되었습니다.Bootstrap 4 및 TypeScript를 사용한 Angular 4 애플리케이션
rxjs -> npm 설치 rxjs@6 rxjs-compat@6 --저장
이제 이온 네이티브 모듈은 필요 없습니다. @ionic 네이티브/core만 필요합니다. 실행
npm uninstall ionic-native --save
그것은 당신의 문제를 해결할 것입니다.
그냥 추가
"noStrictGenericChecks": true
tsconfig.json에게
zmag와 Rahul Sharma의 답변에 감사드립니다. 효과가 있습니다! @zmag @Rahul Sharma
"rxjs": "5.4.1",
"typescript": "~2.4.0"
제 문제는 다음과 같습니다.
typings/globals/core-js/index.d.ts:3:14 - error TS2300: Duplicate identifier
다음과 같이 변경합니다.
패키지로 이동합니다.json 파일을 작성하고 아래 구성을 수정합니다.
"rxjs": "5.4.1",
"typescript": "~2.4.0"
네, 문제는 TypeScript 2.4.1에 있습니다. 방금 제어판에서 이것을 제거했는데 Visual Studio 2017에 이미 이것이 있기 때문에 작동합니다.
언급URL : https://stackoverflow.com/questions/44793859/rxjs-subject-d-ts-error-class-subjectt-incorrectly-extends-base-class-obs
'programing' 카테고리의 다른 글
예외를 던지지 않고 문자열이 GUID인지 테스트하시겠습니까? (0) | 2023.08.20 |
---|---|
WSL2에서 Windows 10 Home과 함께 Docker Desktop을 사용할 때 도커 이미지의 위치를 변경하려면 어떻게 해야 합니까? (0) | 2023.08.20 |
div에서 클립보드로 텍스트를 복사하는 방법 (0) | 2023.08.20 |
ID가 배열에 있는 mysql (0) | 2023.08.20 |
SELECT FROM DUAL로 여러 행이 가능합니까? (0) | 2023.08.20 |