Ошибка после 'ioni c serve' (свойство 'xxx' не существует для типа (xxx)) приводит к "неудачной компиляции" - PullRequest
0 голосов
/ 21 января 2020

Я занимаюсь разработкой мобильного приложения Angular / Ionic4 и сталкиваюсь с этой ошибкой, когда я ionic serve.

Изображение ошибки: Error picture

В первый раз ошибка результат "не удалось скомпилировать", но если я перезапущу его, сохранив файл .ts, пока ошибка все еще присутствует, я получаю обратную связь "успешно скомпилировано", и мое приложение может быть запущено в браузере. Как я могу это исправить?

Вот часть моего .json файла.

{  
"data" : {
"__schema" : {
  "queryType" : {
    "name" : "Query"
  },
  "mutationType" : {
    "name" : "Mutation"
  },
  "subscriptionType" : {
    "name" : "Subscription"
  },
  "types" : [ {
    "kind" : "OBJECT",
    "name" : "Query",
    "description" : null,
    "fields" : [ {
      "name" : "getDelivery",
      "description" : null,
      "args" : [ {
        "name" : "id",
        "description" : null,
        "type" : {
          "kind" : "NON_NULL",
          "name" : null,
          "ofType" : {
            "kind" : "SCALAR",
            "name" : "ID",
            "ofType" : null
          }
        },
        "defaultValue" : null
      } ],
      "type" : {
        "kind" : "OBJECT",
        "name" : "Delivery",
        "ofType" : null
      },
      "isDeprecated" : false,
      "deprecationReason" : null
    }, {
      "name" : "listDeliveries",
      "description" : null,
      "args" : [ {
        "name" : "filter",
        "description" : null,
        "type" : {
          "kind" : "INPUT_OBJECT",
          "name" : "TableDeliveryFilterInput",
          "ofType" : null
        },
        "defaultValue" : null
      },

И есть файл, в котором возникает ошибка.

import { Router } from '@angular/router';
import { AddressService } from './../../address.service';
import { Component, OnInit } from '@angular/core';
import { ConnexionService } from '../../connexion/connexion.service';
import { IonItemSliding } from '@ionic/angular';
import { Address } from '../../address.model';

@Component({
  selector: 'app-address',
  templateUrl: './address.page.html',
  styleUrls: ['./address.page.scss'],
})
export class AddressPage implements OnInit {
  loadedAddress: Address[] = [];
  isLoading = false;

  constructor(private addressService: AddressService, private connexionService: ConnexionService, private route: Router) { }

  ngOnInit() {
  }

  ionViewWillEnter() {
    this.loadedAddress.splice(0, this.loadedAddress.length);
    this.isLoading = true;
    this.addressService.getAddrByUser(this.connexionService.userConnected.sub)
    .then(add => {
      if (add.data.listAddresses.items.length > 0) {
        add.data.listAddresses.items.forEach(item => {
          this.loadedAddress.push(item);
        });
      }
      this.isLoading = false;
    })
    .catch(err => {
      console.log(err);
      this.isLoading = false;
    });
  }

  onDetail(id: string, slidingItem: IonItemSliding) {
    slidingItem.close();
    this.route.navigate(['/', 'detail-address', id]);
  }

  onCreateAddress() {
    this.route.navigateByUrl('new-address');
  }
}

Я испробовал большинство решений, предложенных в StackOverflow, но ни одно из них не сработало.

AddressService:

export class AddressService {

  constructor() { }

  async fetchAddress() {
    const del = await API.graphql(graphqlOperation(queries.listAddresses));
    return del;
  }

  async addAddr(nam: string, roads: string, zipcodes: string, laT: number, lnG: number, idUsers: string, city: string, country: string) {
    const newAddr = {
      name: nam,
      streetName: roads,
      city,
      country,
      zipcode: zipcodes,
      lat: laT,
      lng: lnG,
      idUser: idUsers
    };
    const ad = await API.graphql(graphqlOperation(mutations.createAddress, { input: newAddr }));
    return ad;
  }

  async getAddr(ID: string) {
    const oneAddr = await API.graphql(graphqlOperation(queries.listAddresses, {filter: {
      id: {eq: ID}
    }}));
    return oneAddr;
  }

  async getAddrByUser(ID: string) {
    const oneAddr = await API.graphql(graphqlOperation(queries.listAddresses, {filter: {
      idUser: {eq: ID}
    }}));
    return oneAddr;
  }

  async updateAddr(ID: string,
                   nam: string,
                   roads: string,
                   zipcodes: string,
                   laT: number,
                   lnG: number,
                   idUsers: string,
                   city: string,
                   country: string) {
    const upAddr = {
      id: ID,
      name: nam,
      streetName: roads,
      city,
      country,
      zipcode: zipcodes,
      lat: laT,
      lng: lnG,
      idUser: idUsers
    };
    const resp = await API.graphql(graphqlOperation(mutations.updateAddress, {input: upAddr}));
    return resp;
  }

  async cancelAddress(addressId: string) {
    const ad = await API.graphql(graphqlOperation(mutations.deleteAddress, {input: {id: addressId}}));
    return ad;
  }
}

1 Ответ

0 голосов
/ 21 января 2020

В качестве теста ошибка по-прежнему отображается при наложении типа <any> на рассматриваемый объект, например, (add:any) => {:

 ionViewWillEnter() {
    this.loadedAddress.splice(0, this.loadedAddress.length);
    this.isLoading = true;
    this.addressService.getAddrByUser(this.connexionService.userConnected.sub)
    .then((add:any) => {
      if (add.data.listAddresses.items.length > 0) {
        add.data.listAddresses.items.forEach(item => {
          this.loadedAddress.push(item);
        });
      }
      this.isLoading = false;
    })
    .catch(err => {
      console.log(err);
      this.isLoading = false;
    });
  }

Это не решение, а шаг навстречу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...