2017-12-03 285 views
1

我已经通过this post(和this one以及)找到我的问题的解决方案。Ionic3,Typescript - 忽略Typescript错误“属性”在类型''的值不存在

我想忽略这些错误:

Property 'payload' does not exist on type 'Matatu'.

Property 'key' does not exist on type 'Matatu'.

我试图声明变量“覆盖”的类型系统,但并未奏效。

这里是我的.ts代码,是我到目前为止已经尝试:

import { Component } from '@angular/core'; 
import { IonicPage, NavController, NavParams, ActionSheetController } from 'ionic-angular'; 
import { AngularFireList, AngularFireDatabase } from 'angularfire2/database'; 
import { Matatu } from '../../models/matatu/matatu.interface'; 
/* imports */ 

declare var payload; 
declare var key; 

@IonicPage() 
@Component({ 
    selector: 'page-owner-dash', 
    templateUrl: 'owner-dash.html', 
}) 
export class OwnerDashPage { 

    matatuListRef$: AngularFireList<Matatu>; 
    matatuListAsync$: any; 

    constructor(public navCtrl: NavController, public navParams: NavParams, private database: AngularFireDatabase, public actionShtCrtl: ActionSheetController) { 

    this.matatuListRef$ = this.database.list('matatu-list'); 
    this.matatuListAsync$ = this.matatuListRef$.snapshotChanges(); 

    } 

    ionViewDidLoad() { 
    //stuff 
    } 

    selectMatatu(matatu: Matatu){ 
    this.actionShtCrtl.create({ 
     title: `${matatu.payload.val().matNumberPlate}`, 
     buttons: [ 
     { 
      text: 'Edit', 
      handler:() => { 
      //stuff 
      }   
     }, 
     { 
      text: 'Delete', 
      role: 'destructive', 
      handler:() => { 
      this.matatuListRef$.remove(matatu.key); 
      } 
     }, 
     { 
      text: 'Cancel', 
      role: 'cancel', 
      handler:() => { 
      //do something 
      } 
     } 
     ] 
    }).present(); 
    } 


} 

这里的Matatu结构:

export interface Matatu { 
    $key?: string; 
    matNumberPlate: string; 
    matSacco: string; 
    matDriver: string; 
    matAccessCode: string; 
    matStatus: string; 
    matTracker: string; 
    matLocation: string; 

} 

我怎么投的财产,以任何类型?

+0

请问您还可以添加“Matatu”类型的定义吗? – sebaferreras

+0

这是一个界面。它是。 – kenyami

回答

2

如何将属性转换为任何类型?

如果你只是想投,为了避免打字稿错误,你可以做这样的事情:

// ... 
title: `${(<any>matatu).payload.val().matNumberPlate}`, 
// ... 

而且

// ... 
this.matatuListRef$.remove((<any>matatu).key); 
// ... 

这样matatu将被转换为any并且错误应该消失。


我建议你,如果你可以修改Matatu接口,将有添加这两个属性,而不是:

export interface Matatu { 
    $key?: string; 
    matNumberPlate: string; 
    matSacco: string; 
    matDriver: string; 
    matAccessCode: string; 
    matStatus: string; 
    matTracker: string; 
    matLocation: string; 

    // New properties are optional 
    payload?: any; 
    key?: any; 
} 

这样,你不需要施放matatu财产因为​​和key都是Matatu类型定义的一部分(并且都是any类型)。

相关问题