Angular Promise <void>'不能分配给类型

时间:2017-07-25 15:46:50

标签: angular api typescript

我正在使用Contentful CMS API构建Angular4网站以检索数据。 问题是即使控制台显示这些类型,我也无法为返回的数据分配正确的类型。

模拟数据:

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返回这些数据,我将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:2)

  1. 您正在尝试为数组分配承诺,您必须在承诺的回调中执行赋值。
  2. 您对{1}}对promise的调用不会返回任何内容,对then的调用会迭代一个集合但不返回任何内容。如果你想创建/返回一些东西,你可以使用forEach根据传入的谓词创建一个新的集合。
  3. 对promise承诺回调使用箭头函数,以便在需要时引用map
  4. 不需要将Page设为具体类型,而是使用界面,以便您可以使用强制转换。如果要添加行为,只需要一个具体的类型,但是如果它只是一个从json反序列化的普通旧对象,则使用一个接口。
  5. 修复:

    this

    从某个方法中执行getEntries。

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

    <强>的iPage

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

答案 1 :(得分:0)

使您的页面类成为类型断言的接口,而无需实例化,如此

export interface Page { title : string }