![](/img/trans.png)
[英]I am getting error TS2339: Property 'total' does not exist on type any[]
[英]Why am I getting error TS2339: Property 'scan' does not exist on type 'Subject<any>'?
编辑 :实际上,现在我想知道。 Rxjs是否已从6.x中的链接转移到管道? 参见: https : //stackoverflow.com/a/49811404/8207637
这是我第一次使用rxjs流。 我正在尝试创建一些非常简单的错误,但是无论是从tslint还是在构建时,都始终收到此错误。
我花了几个小时进行谷歌搜索并试图找出答案。 看到几个人建议直接导入运算符。 但这需要将它们包装在pipe()
中才能使用它们。 我希望能够将它们链接在一起。
当我发现可能需要添加rxjs-compat
来解决问题时,我已经开始整理一个StackBlitz示例。 所以我将rxjs-compat
添加到StackBlitz示例中, 瞧! 错误消失了。
因此,我想出了如果将软件包添加到项目中,则可以预期得到类似的结果。 不!
不确定如何解决该问题。 我已经链接到stackblitz,它显示了导入工作和构建工作(服务文件不执行任何操作)。
Stackblitz https://stackblitz.com/edit/angular-rxjs-init
这是我的项目文件 (不是来自stackblitz)
的package.json
{ "name": "ng7-zprod", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e" }, "private": true, "dependencies": { "@angular/animations": "^7.1.4", "@angular/cdk": "^7.2.0", "@angular/common": "~7.1.0", "@angular/compiler": "~7.1.0", "@angular/core": "~7.1.0", "@angular/forms": "~7.1.0", "@angular/material": "^7.2.0", "@angular/platform-browser": "~7.1.0", "@angular/platform-browser-dynamic": "~7.1.0", "@angular/router": "~7.1.0", "@ncstate/sat-popover": "^3.1.0", "core-js": "^2.5.4", "jquery": "^1.9.1", "popper.js": "^1.14.6", "rxjs": "~6.3.3", "rxjs-compat": "^6.3.3", "tslib": "^1.9.0", "zone.js": "~0.8.26" }, "devDependencies": { "@angular-devkit/build-angular": "^0.11.4", "@angular/cli": "~7.1.3", "@angular/compiler-cli": "~7.1.0", "@angular/language-service": "~7.1.0", "@fortawesome/fontawesome-free": "^5.6.3", "@types/jasmine": "~2.8.8", "@types/jasminewd2": "~2.0.3", "@types/node": "~8.9.4", "bootstrap": "^4.2.1", "codelyzer": "~4.5.0", "jasmine-core": "~2.99.1", "jasmine-spec-reporter": "~4.2.1", "karma": "~3.1.1", "karma-chrome-launcher": "~2.2.0", "karma-coverage-istanbul-reporter": "~2.0.1", "karma-jasmine": "~1.1.2", "karma-jasmine-html-reporter": "^0.2.2", "protractor": "~5.4.0", "ts-node": "~7.0.0", "tslint": "~5.11.0", "typescript": "~3.1.6" } }
Service.ts
import { Injectable } from '@angular/core'; import { Subject, Observable } from 'rxjs'; import { ZTask } from '../models/ztask'; const initialZTasks: ZTask[] = []; interface IZTaskOperation extends Function { // tslint:disable-next-line:callable-types (ztasks: ZTask[]): ZTask[]; } @Injectable({ providedIn: 'root' }) export class ZTasksService { newTasks: Subject<ZTask> = new Subject<ZTask>(); ztasksList: Observable<ZTask[]>; ztasksListUpdates: Subject<any> = new Subject<any>(); ztaskcreate: Subject<ZTask> = new Subject<ZTask>(); constructor() { this.ztasksList = this.ztasksListUpdates .scan((ztasks: ZTask[], // this line is where I get the error operation: IZTaskOperation) => { return operation(ztasks); }, initialZTasks) .publishReplay(1) .refCount(); } }
正如@dmcgrandle在评论中所说,Rxjs为了改变目录声明而放弃了链接。
实际上,这实际上可以清理导入语句。
我安装rxjs-compat
时应该已经修复了它,但是不是。 不知道为什么。
但是现在使用管道是正确的方法。 像这样:
import { Injectable } from '@angular/core'; import { Subject, Observable } from 'rxjs'; import { ZTask } from '../models/ztask'; import { scan, publishReplay, refCount } from 'rxjs/operators'; const initialZTasks: ZTask[] = []; interface IZTaskOperation extends Function { // tslint:disable-next-line:callable-types (ztasks: ZTask[]): ZTask[]; } @Injectable({ providedIn: 'root' }) export class ZTasksService { newTasks: Subject<ZTask> = new Subject<ZTask>(); ztasksList: Observable<ZTask[]>; ztasksListUpdates: Subject<any> = new Subject<any>(); ztaskcreate: Subject<ZTask> = new Subject<ZTask>(); constructor() { this.ztasksList = this.ztasksListUpdates.pipe( scan((ztasks: ZTask[], operation: IZTaskOperation) => { return operation(ztasks); }, initialZTasks), publishReplay(1), refCount() ) } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.