【问题标题】:How to cast object in object into Angular Class (Type)如何将对象中的对象转换为 Angular 类(类型)
【发布时间】:2019-05-29 15:08:45
【问题描述】:

如何将obj.category 转换为下面示例中的Category 类型?

我需要这个来设置下拉列表中的选定选项。

export class Category{
    id: number;
    name: string;

    constructor(obj: any) {
        this.id = obj.id;
        this.name = obj.name;
    }
}


export class Post {
    category: Category[];

    constructor(obj: any) {
        this.category = obj.category;
    }
}

类别服务如下所示:

getCategories(): Promise<Category[]> {
    return this.http.get(this.appConfig.apiEndpoint + 'categories/').toPromise()
  .then(response => response.json().map(obj => new Category(obj)))
  .catch(this.handleError);
}

API 响应:

[{"id":1,"name":"cat1"},{"id":2,"name":"cat2"}]

模板:

<select multiple name="category" [(ngModel)]="obj.post.category">
    <option  *ngFor="let category of categories" [ngValue] = "category">
       {{category.name}}
    </option>
</select>

【问题讨论】:

  • 在你的代码中Post被声明为一个接口,它应该是一个类。 Category 也是接口还是类?如果它是一个接口并且obj.category 具有与预期接口相同的形状,那么您的代码应该可以正常工作
  • 类别为export class
  • obj.category 是一个具有什么运行时形状的对象?您应该提供更多信息。 obj 的例子是什么,Category 类是什么样的?
  • @TitianCernicova-Dragomir 我在我的代码中添加了更多细节。 obj.category 与 Category api 响应具有相同的结构。如果不将export class Category 更改为界面,它可以工作吗?
  • 你得到了什么错误,代码看起来没问题,你获取响应数组并使用map将其转换为Category的数组

标签: angular typescript


【解决方案1】:

可能的答案

export interface Category {
 name: string;
 prop: string;
}
export class Post {
    category: Category[];
    constructor(obj: any) {
        this.category = obj.category as Category[];
    }
}
`

【讨论】:

  • 我尝试了这个解决方案,但我的应用无法使用 Category 作为界面。
  • 您可以在上面的服务中看到:obj =&gt; new Category(obj),它不适用于接口。
【解决方案2】:

关键字as 允许我正确地将我的对象转换为所需的类并修复了错误'TS2322:类型'{}' 不可分配给类型...'。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2012-01-16
    • 2017-05-02
    相关资源
    最近更新 更多