2017-02-01 5 views
1

Bin in die Welt von Angular 2 und TypeScript hineingewagt und triff diesen Fehler. Sieht so aus, als könntest du _isScalar irgendwo einstellen ... nur nicht sicher wo das sein soll.TypeScript SomeArray [] 'kann nicht dem Typ' Observable <SomeArray[]> 'zugewiesen werden.

ich die folgende Fehlermeldung erhalten (Kommentarzeile in Code):

Type 'Rating []' ist nicht übertragbar 'beobachtbar' eingeben. Property '_isScalar' in Typ fehlt 'Bewertung []'

Für den folgenden Code:

import { Injectable } from '@angular/core'; 
import { Inject } from '@angular/core'; 
import { Jsonp, JsonpModule, Http } from '@angular/http'; 
import { Rating } from './rating.model'; 
import { Observable } from 'rxjs/Rx'; 
import { DOCUMENT } from '@angular/platform-browser' 
import { IODataList } from '@microsoft/sp-odata-types'; 
import { SPHttpClient, SPHttpClientConfigurations, SPHttpClientConfiguration, SPHttpClientResponse, ODataVersion, ISPHttpClientConfiguration } from '@microsoft/sp-http'; 

@Injectable() 
// See: http://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdownlist/#toc-data-binding 

export class RatingsService { 
//constrauctor(private jsonp: Jsonp) { } 
    constructor(@Inject(Http) private http: Http, @Inject(DOCUMENT) private document: any) { } 

    //var url = this.context.pageContext.web.absoluteUrl + `/_api/web/lists?$filter=Hidden eq false`; 

    private choices: Array<Rating> = []; 

    public fetchData(): Observable<Rating[]> { 

     console.log("BGW: Document location = " + document.location.href); 
    // var url = this.context.pageContext.web.absoluteUrl + `/_api/web/lists?$filter=Hidden eq false`; 
     //var response = this.jsonp.get(url); //.map((response => response.json())); 
     console.log("BGW: Ratings choices url = " + url); 

     //var choices: Array<Rating> = new Array<Rating>(); 
     var choices: Array<Rating> = new Array<Rating>(); 
     // choices._isScalar = true; 
     //let choices: Observable<Rating[]> = new Observable<Rating>(); 

     if (document.location.href.indexOf("localhost") > 0) 
     { 
      // Send dummy data to the form. 
      console.log("BGW: Local workbench in use"); 
      choices.push(new Rating("High")); 
      choices.push(new Rating("Medium")); 
      choices.push(new Rating("Low")); 
      return choices; // *** ISSUE HERE *** 
     } 
     else 
     { 
      var url = "https://somewhere.sharepoint.com/sites/Development/Subsite/_api/web/lists/GetByTitle('Requirements')/fields?$filter=EntityPropertyName%20eq%20%27Requirement_x0020_Rating%27"; 
      console.log("BGW: Ratings choices url = " + url); 
      // Ref: http://chariotsolutions.com/blog/post/angular2-observables-http-separating-services-components/ 
      var response = this.http.get(url).map((response => response.json())); 
      console.log("BGW: response = " + JSON.stringify(response)); 

      return response.map((choices: Array<any>) => { 
       if (choices) { 
        choices.forEach((choice) => { 
         choices.push(new Rating(choice)); 
        }); 
       } 
       return choices; 
      }); 
     } 
    } 
} 

Antwort

0

Sie benötigen einen beobachtbaren wie zurückzukehren:

return Observable.of<Rating[]>(choices); 

, die die statische Methode verwendet of, aber es gibt viele andere Möglichkeiten.

Der Grund, warum Sie die Compiler-Fehler zu sehen ist, weil Sie den Rückgabetyp in der Methodensignatur angeben:

public fetchData(): Observable<Rating[]> 
2

Das Problem ist, weil Sie kein beobachtbares wie Sie angegeben haben, kehren zurück:

public fetchData(): Observable<Rating[]> 

aber später auf den Sie definieren ...

var choices: Array<Rating> = new Array<Rating>(); 

Das heißt Warum erhalten Sie den Fehler? Es gibt einen Unterschied zwischen einem Observable Array und einem "normalen" Array. Wenn Sie nicht explizit benötigen angeben, was Sie zurückgeben, würde ich nur die Observable<Rating[]> insgesamt entfernen.

+0

@webtechy, hat Ihnen entweder geholfen, mit Ihrem Problem zu helfen? Wenn ja, würden Sie bitte eine Antwort akzeptieren, indem Sie auf das graue Häkchen unter der Antwortabstimmung klicken? :) http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Alex

Verwandte Themen