首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular Promise<void>‘不能赋值给类型

Angular Promise<void>‘不能赋值给类型
EN

Stack Overflow用户
提问于 2017-07-25 23:46:50
回答 2查看 1.6K关注 0票数 0

我正在建设Angular4网站使用内容CMS API来检索数据。问题是我不能为返回的数据分配正确的类型,即使控制台显示了这些类型。

模拟数据:

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

通过控制台返回(如果使用的是console.log ):

代码语言:javascript
复制
Object { title: "About Aliens" }
Object { title: "Portfolio" }
Object { title: "Meet the team" }
Object { title: "Contact us" }

以及我用来分配这些数据类型的类:

代码语言:javascript
复制
export class Page {
  title: string;
}

我刚开始使用Typescript,我想知道我在哪里弄错了,如果有人能指导我从任何API返回这样的数据,我将不胜感激。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-07-25 23:54:54

  1. 您正尝试将promise赋给数组,则必须在promise的回调中进行赋值。
  2. 对promise的then调用不返回任何内容,对forEach的调用遍历集合但不返回任何内容。如果你想创建/返回一些东西,你可以使用map,它根据传入的谓词创建一个新的集合。
  3. 为promise回调使用一个箭头函数,这样你就可以在需要的时候引用到this
  4. 没有必要让页面成为一个具体的类型,而是使用一个接口,这样你就可以使用强制转换了。如果您要添加行为,则只需要一个具体类型,但如果它只是一个从json反序列化的普通旧对象,则使用接口。

解决方法:

代码语言:javascript
复制
export NAMES: IPage[]; // no assignment at this point

从某个方法中执行getEntries。

代码语言:javascript
复制
content.getEntries({
    content_type: 'mainMenu'
}).then((response) => {
   NAMES = response.items.map(element => element as IPage);
});

IPage

代码语言:javascript
复制
export interface IPage {
  title: string;
}
票数 2
EN

Stack Overflow用户

发布于 2017-07-25 23:51:10

使页面类成为类型断言的接口,而不需要实例化,如下所示

代码语言:javascript
复制
export interface Page { title : string }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45308053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档