2017-07-20 4 views
0

Ich baue eine App auf Angular 4 mit TypeScript. Ich weiß nicht, warum ich den FehlerAngular4 Typoskript; Eigenschaft 'Daten' existiert nicht für den Typ 'any []'

Property 'data' does not exist on type 'any[]'

für einen Ausdruck wie folgt aus. Ich habe das aus einer Komponente herausgenommen;

LoadAllUsers(): void { 
    this.AllUsers.Loading = true; 
    let AdditionalParams = { 
     'page': this.AllUsers.CurrentPage 
    }; 
    this.UserService.All(AdditionalParams) 
     .subscribe(
      (users) => { 
       this.AllUsers.Users = users.data; 
       this.AllUsers.Data = users; 
       this.AllUsers.Loading = false; 
       this.AllUsers.Loaded = true; 
       console.log ("Users response: ", this.AllUsers, this.AllUsers.Users); 
      }, 
      (error)=> { 
       this.AllUsers.Loading = false; 
       console.log ("THE ERROR: ", error); 
       this.AllUsers.RequestStatus = error.status=0; 
       if (typeof error.json == 'function' && error.status!=0) { 
       let errorObject = error.json(); 
       this.AllUsers.RequestError = errorObject; 
       } else { 
       this.AllUsers.RequestError = "net::ERR_CONNECTION_REFUSED"; 
       } 
       this.AllUsers.HasRequestError = true; 
      }); 
    } 

Ich kann diesen Fehler nur umgehen, indem Sie; (users) => this.PrepareUsers(users)

Ich muss etwas über TypeScript fehlen. Was seltsam ist, kann ich verwenden error.status

+1

Die Nachricht ist explizit. Die "All" -Methode gibt eine Observable eines Arrays zurück ("Observable "). Sie versuchen, die Dateneigenschaft des Arrays abzurufen, aber sie existiert nicht. Sie sollten über die Liste iterieren, um die Daten jedes Benutzers zu erhalten. – bchampion

+0

Ja, das merke ich jetzt. Ich habe es so verändert, dass es so aussieht; All (AdditionalParams: object): Observable { – LogicDev

+2

Warum kapitalisieren Sie überall? https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines – JGFMK

Antwort

3

Ich schätze, Sie sollten die Methodensignatur in Ihrem Service zu etwas wie All(AdditionalParams: any): Observable<User[]> ändern, natürlich, das ist, wenn Sie ein Benutzermodell haben. Variablen und Methoden sollten ebenfalls mit Kleinbuchstaben beginnen.

0

Die Daten, die von Ihrem Dienst im Parameter (users) zurückgegeben werden, sind ein Array. Alle Arrays haben dieselben Eigenschaften und Methoden. .data ist keine Eigenschaft oder Methode eines Arrays.

Sie können alle Eigenschaften und Methoden auf dem Array-Typ here

etwas finden, das Sie debuggen Ihr spezielles Problem wäre einzuloggen die (users) an die Konsole und sehen, was die Daten aussehen kann helfen:

LoadAllUsers(): void { 
    this.UserService.All(AdditionalParams) 
     .subscribe(
      (users) => { 
       console.log(users); 
      }); 
    } 

Ihre Daten werden möglicherweise nicht in der von Ihnen erwarteten Form angezeigt.

Verwandte Themen