2017-04-23 47 views
1

你好,我是Typesctipt和Angular2的新手。 我不明白爲什麼編譯器指出「wordListId」不存在:Typescript - 缺少屬性,但它已經存在

住宅「wordListId」類型上不存在「IWordList」。

和事件vs代碼自動完成顯示它存在。 Image

WordlistsdataService.ts

import { Injectable, OnInit } from '@angular/core'; 
import { Http, Response } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import { IWordList } from './IWordlist'; 
import 'rxjs/add/operator/map'; 

@Injectable() 
export class WordlistsdataService implements OnInit { 

    private url :string = 'src/app/wordlists/wordlists.json'; 
    constructor(private http : Http) { } 

    getWordLists() : Observable<IWordList[]> { 
    return this.http.get(this.url) 
        .map((response : Response) => <IWordList[]>response.json()) 
    } 

    getWordList(id : number) : Observable<IWordList>{ 
    return this.getWordLists().map((wordLists : IWordList[]) => wordLists.find(p => p.wordListId === id)); 
    } 

    ngOnInit(){ 
    } 

} 

IWordList.ts(接口)

export interface IWordList{ 
    wordListId : number, 
    title : string, 
    image : string, 
    words : string, 
    description : string, 
} 

wordlists.json

[ 
    { 
      "wordListId" : 1, 
      "title" : "Animals", 
      "image" : "/src/app/images/wordlists/animals_background.jpg", 
      "words" : "cat,elephant,cow,duck", 
      "description" : "sdadasd" 
     }, 
     { 
      "id" : 2, 
      "title" : "Jobs", 
      "image" : "/src/app/images/wordlists/jobs_background.jpg", 
      "words" : "engineer,farmer,artist,programmer", 
      "description" : "sdadasd" 
     } 
] 
+0

實現'OnInit'的服務?我不認爲這樣做。 –

+0

但我不確定,如果這是原因,那麼JSON中的第二個對象確實缺少'wordListId'屬性。同時檢查'.map((wordLists:IWordList [])=> wordLists.find(p => p.wordListId === id))'; 'map'回調中的第一個參數應該是數組中的當前值,而不是整個數組。您可以查看以供參考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map?v = example –

+0

不要在回調參數中指定類型是不安全的。 –

回答

0

我認爲這個錯誤是從的WebPack誤導。你應該照顧你的第一個錯誤,然後嘗試重新編譯,錯誤應該消失。在給定的代碼中我看不到任何錯誤。