如何解决rxjs Typescript错误(离子3,angularfire2)

时间:2019-02-22 12:18:24

标签: angular typescript ionic3 rxjs

当我尝试使用angularfire2服务于ionic 3应用程序时,我再次出现错误。

这些是错误:

  

打字稿错误';'预期。   C:/Users/Admin/Verein/node_modules/rxjs/internal/types.d.ts

     

导出声明类型ObservedValueOf = O扩展   ObservableInput? T:从不;

     

应输入Typescript错误表达式。   C:/Users/Admin/Verein/node_modules/rxjs/internal/types.d.ts

     

导出声明类型ObservedValueOf = O扩展   ObservableInput? T:从不;

     

Typescript错误“ ObservableInput”仅引用一种类型,但正在   在这里用作值。   C:/Users/Admin/Verein/node_modules/rxjs/internal/types.d.ts

     

Typescript错误找不到名称“推断”。   C:/Users/Admin/Verein/node_modules/rxjs/internal/types.d.ts

以及更多与rxjs有关的内容。我正在使用这样的示例:

import { Note } from '../../model/note/note.model';
import { AngularFireDatabase } from 'angularfire2/database';
import { map } from 'rxjs/operators';
import { Observable } from 'rxjs';

@Component({
  selector: 'page-aufgaben',
  templateUrl: 'aufgaben.html'
})
export class AufgabenPage {


  aufgaben: Observable<Note[]>;

  constructor(public navCtrl: NavController, private modal: ModalController, public events: Events, private db: AngularFireDatabase) {

      this.aufgaben = this.db.list('/aufgabenverzeichnis/').snapshotChanges().pipe(
     map(changes =>
       changes.map(c => ({ key: c.payload.key, ...c.payload.val() }))
     )
   );
  }

这是我的package.json:

{
  "name": "Verein",
  "version": "0.0.1",
  "author": "Ionic Framework",
  "homepage": "http://ionicframework.com/",
  "private": true,
  "scripts": {
    "start": "ionic-app-scripts serve",
    "clean": "ionic-app-scripts clean",
    "build": "ionic-app-scripts build",
    "lint": "ionic-app-scripts lint"
  },
  "dependencies": {
    "@angular/animations": "5.2.11",
    "@angular/common": "5.2.11",
    "@angular/compiler": "5.2.11",
    "@angular/compiler-cli": "5.2.11",
    "@angular/core": "5.2.11",
    "@angular/forms": "5.2.11",
    "@angular/http": "5.2.11",
    "@angular/platform-browser": "5.2.11",
    "@angular/platform-browser-dynamic": "5.2.11",
    "@ionic-native/core": "~4.18.0",
    "@ionic-native/splash-screen": "~4.18.0",
    "@ionic-native/status-bar": "~4.18.0",
    "@ionic/storage": "2.2.0",
    "@reactivex/rxjs": "^5.5.3",
    "angularfire2": "^5.1.1",
    "firebase": "^5.8.4",
    "ionic-angular": "3.9.3",
    "ionicons": "3.0.0",
    "promise-polyfill": "^8.1.0",
    "rxjs": "^6.4.0",
    "rxjs-compat": "^6.4.0",
    "sw-toolbox": "3.6.0",
    "zone.js": "0.8.29"
  },
  "devDependencies": {
    "@ionic/app-scripts": "3.2.1",
    "@ionic/lab": "1.0.20",
    "typescript": "^2.6.2"
  },
  "description": "An Ionic project"
}

我知道它与不同版本有关,但我读到安装rxjs compat应该可以解决问题。问题是它从未做到过。当我保存项目的一部分而未在IDE中进行任何更改时,在重新加载实验室页面后它可以再次工作,这甚至很奇怪。所以我真的不知道该怎么办了。请帮忙。

编辑:遵循以下建议并升级到打字稿2.7.2并将rxjs / rxjs-compat升级到6.3.3后,上述错误消失了,但我得到了一堆新错误,但在随机保存项目在我的IDE中,但是如果我再次提供--lab,请再回来。这些是新的错误:

我设法摆脱了其中的一些(它们都与语法相关),但是有一种我无法摆脱的类型,因为我不知道如何更改语法。剩下的所有错误都是这样的:

打字稿错误 输入'Observable <{key:string; } []>'不可分配给Observable <(Note [])>类型。输入'{键:字符串; } []'不能分配给'Note []'类型。输入'{键:字符串; }”不可分配给“注释”类型。类型'{key:string;类型中缺少属性'titel'。 }'。

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { ModalController } from 'ionic-angular';
import { Events } from 'ionic-angular';
import { Note } from '../../model/note/note.model';
import { AngularFireDatabase } from 'angularfire2/database';
import { map } from 'rxjs/operators';
import { Observable } from 'rxjs';

@Component({
  selector: 'page-aufgaben',
  templateUrl: 'aufgaben.html'
})
export class AufgabenPage {

  public color: string = 'primary';
  public color2: string ='primary';
  aufgaben: Observable<Note[]>;

  constructor(public navCtrl: NavController, private modal: ModalController, public events: Events, private db: AngularFireDatabase) {

/*error points to this.aufgaben*/ this.aufgaben = this.db.list('/aufgabenverzeichnis/').snapshotChanges().pipe(
         map(changes =>
           changes.map(c => ({ key: c.payload.key, ...c.payload.val() }))
         )
       );
      }

Note.model.ts:

 export interface Note {
  titel: string;
  beschreibung: string;
}

此错误在不同的ts文件中多次发生,因此我仅列出了一个示例。保存后它们全部消失,重新打开应用程序后重新出现,而无需我进行任何更改。所以我真的不知道该如何解决。这些语法错误与新的打字稿版本有关吗?

编辑:我可以通过将“ aufgaben: Observable<Note[]>”更改为“ aufgaben: Observable<any[]>”来解决此问题。感谢您的帮助:)。

1 个答案:

答案 0 :(得分:0)

这些问题与rxjsTypescript有关。在rxjs的新版本(6.4.0)中,受支持的TypeScript的最低版本为2.8。但是在您的情况下,TypeScript版本是2.6.2。这就是这个问题的原因。要解决此问题,请TypeScript升级到2.8或将rxjsrxjs-compat降级到与Typescript 2.6.2兼容的矿工版本。

就我而言,我将rxjsrxjs-compat降级为 6.3.3 版本(我的打字稿版本为2.7.2)。

Find more information here