2017-02-05 8 views
0

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

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

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[]' 

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

ответ

0

Просто отдать свой объект явно к классу Направление:

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" } 
] 
+0

Спасибо. Попробовал лить объект в класс реферала, как было предложено. Все еще получаются ошибки следующим образом: Тип '(Referral | {type: string; title: string; text: string; imageUrl: string;}) []' не может быть присвоен типу 'NewsItem []'. Тип '{type: string; title: string; текст: строка; imageUrl: string; } 'не присваивается типу' NewsItem '. Типы собственности «тип» несовместимы. Тип «строка» не может быть присвоен типу «большой» | «маленький» | «реферал» | "InterestLink". – Anurag

+0

Thaknks Alexander. Ваше предложение сработало. Ошибка в моем предыдущем комментарии состояла в том, что я не правильно набрал getItems()! – Anurag