Angular 2: Как вернуть объекты, принадлежащие нескольким классам, расширяющим суперкласс в одном массиве?

Я пытаюсь создать службу в приложении Angular 2-Native Script, которая определяет массив новостных элементов и имеет несколько методов, работающих с одними и теми же данными. Эти новости могут быть разных типов, например, большие, маленькие и т. Д., Каждый из которых может иметь разные параметры.

Я определил интерфейс и сервис, как показано ниже.

import { Injectable } from "@angular/core";

export interface NewsItem {
type: "big" | "small" |"referral";
title: string;
text: string;
imageUrl?: string;
}

export interface Referral extends NewsItem {
type: "referral";
username: string;
}


@Injectable()
export class NewsService {
    private data = [ 
        { type: "big", title: "This is one big item!", text: "Lorem ipsum     dolor sit amet, consectetur adipiscing elit. Phasellus iaculis, turpis vitae ornare accumsan, arcu tortor ultrices nunc, eu aliquam libero sapien vitae tellus.", imageUrl: "https://octodex.github.com/images/octocat-de-los-muertos.jpg" }, 
        { type: "small", title: "Yes, we code!", text: "Vivamus a sem eget erat feugiat hendrerit at quis massa. Nullam varius ac eros non dignissim. Fusce gravida arcu libero.", imageUrl: "https://octodex.github.com/images/baracktocat.jpg" },
        { type: "referral", title: "Yes, we code!", username:"Vasanthi Subramaniam", text: "Vivamus a sem eget erat feugiat hendrerit at quis massa. Nullam varius ac eros non dignissim. Fusce gravida arcu libero.", imageUrl: "https://octodex.github.com/images/baracktocat.jpg" }
    ]   

private getItems(): NewsItem {
        let result:NewsItem[] = this.data;

    return result;
}
}

Я получаю сообщение об ошибке следующим образом:

Type '({ type: string; title: string; text: string; imageUrl: string; } 
| { type: string; title: string...' is not assignable to type 'NewsItem[]'

Как я могу определить массив так, чтобы его можно было назначать новостным элементам?

1 ответ

Решение

Просто приведите ваш объект явно к классу Referral:

private data = [ 
    { type: "big", title: "This is one big item!", text: "Lorem ipsum     dolor sit amet, consectetur adipiscing elit. Phasellus iaculis, turpis vitae ornare accumsan, arcu tortor ultrices nunc, eu aliquam libero sapien vitae tellus.", imageUrl: "https://octodex.github.com/images/octocat-de-los-muertos.jpg" }, 
    { type: "small", title: "Yes, we code!", text: "Vivamus a sem eget erat feugiat hendrerit at quis massa. Nullam varius ac eros non dignissim. Fusce gravida arcu libero.", imageUrl: "https://octodex.github.com/images/baracktocat.jpg" },
    <Referral>{ type: "referral", title: "Yes, we code!", username:"Vasanthi Subramaniam", text: "Vivamus a sem eget erat feugiat hendrerit at quis massa. Nullam varius ac eros non dignissim. Fusce gravida arcu libero.", imageUrl: "https://octodex.github.com/images/baracktocat.jpg" }
]
Другие вопросы по тегам