2017-07-25 71 views
0

我正在構建使用Contentful CMS API檢索數據的Angular4網站。 問題是我無法爲返回的數據分配正確的類型,即使控制檯顯示了這些類型。Angular Promise <void>'不可分配到類型

素數據:

export const NAMES: Page[] = content.getEntries({ 
    content_type: 'mainMenu' 
}).then(function(response){ 
response.items.forEach(element => { 
    return element.fields; 
}) 
}); 

這是通過控制檯回報(如果使用的console.log):

Object { title: "About Aliens" } 
Object { title: "Portfolio" } 
Object { title: "Meet the team" } 
Object { title: "Contact us" } 

,我用它來分配這些數據類型的類:

export class Page { 
    title: string; 
} 

我是新來的Typescript,我想知道我錯了什麼地方,如果有人指導我,我將不勝感激我可以去掌握從任何API返回這些數據。

謝謝。

回答

0

讓你的網頁類,而不需要實例化類型聲明的接口,像這樣

export interface Page { title : string } 
2
  1. 您試圖分配承諾的數組,你所要做的回調分配的承諾。
  2. 您的then呼籲承諾不會返回任何內容,呼叫forEach遍歷集合,但不返回任何內容。如果你想創建/返回一些東西,你可以使用map,它根據傳入的謂詞創建一個新的集合。
  3. 對promise回調使用箭頭函數,因此如果您需要它,請參考this
  4. 沒有必要使頁面成爲一個具體的類型,而是使用一個接口,所以你可以使用轉換。如果要添加行爲,只需要一個具體類型,但如果它只是一個從json反序列化的普通舊對象使用接口。

的修復:

export NAMES: IPage[]; // no assignment at this point 

從一些方法內執行getEntries。

content.getEntries({ 
    content_type: 'mainMenu' 
}).then((response) => { 
    NAMES = response.items.map(element => element as IPage); 
}); 

的iPage

export interface IPage { 
    title: string; 
} 
+1

OP希望數據是類型'Page',所以...'.MAP(元素=> Object.assign(新頁(),element.fields ))'? :) – Alex

+0

@ AJT_82 - 良好的捕獲。 – Igor

+0

upvote!我更喜歡接口,所以更好! ;) – Alex

相關問題