【问题标题】:Type 'Observable<>' is missing properties in Angular NativescriptAngular Nativescript 中的类型“Observable<>”缺少属性
【发布时间】:2019-02-26 05:39:10
【问题描述】:

当我将函数设置为getCalendarEvents(): Observable&lt;Array&lt;CalendarEvent&gt;&gt;{ 时,我遇到了这个问题。错误消息显示为Type 'Observable&lt;CalendarEvent[]&gt;' is missing the following properties from type 'CalendarEvent[]': length, pop, push, concat, and 24 more.

这是service.ts

getCalendarEvents(): Observable<Array<CalendarEvent>>{
         var listCal:any = []
         return this.getCalendarData().pipe(map((data: any) => {
          listCal = data;
        console.log('list cal', listCal)
             let startDate: Date,
             endDate: Date,
             event: CalendarEvent;
             let colors: Array<Color> = [new Color(200, 188, 26, 214), new Color(220, 255, 109, 130), new Color(255, 55, 45, 255), new Color(199, 17, 227, 10), new Color(255, 255, 54, 3)];
             let events: Array<CalendarEvent> = new Array<CalendarEvent>();
             for (let i = 1; i < listCal.length; i++) {
                  event = new CalendarEvent(listCal[i].title, new Date(listCal[i].date), new Date(listCal[i].date), false, colors[i * 10 % (listCal[i].colour.length - 1)]);    

                  events.push(event);     
              }
             return events;
            }));          
    }

在 service.ts 中,错误未显示,但由于声明我在日历组件中面临上述错误,即:

import { Component, OnInit } from '@angular/core';

import { calendarApiService } from './service/api.service';
import { CalendarClass } from './classes/calendarClass';
import { RadCalendar, CalendarEvent, CalendarSelectionEventData } from "nativescript-ui-calendar";

@Component({
  selector: 'ns-calendar',
  templateUrl: './calendar.component.html',
  styleUrls: ['./calendar.component.css'],
  moduleId: module.id,
  providers: [calendarApiService]
})
export class CalendarComponent implements OnInit {

  constructor(private _calendarApiService: calendarApiService) {
    //console.log("hi");

   }
   private _events: Array<CalendarEvent>;
   private _listItems: Array<CalendarEvent>;

   listOfCalendar: CalendarClass[];




get eventSource() {
    return this._events;
}

get myItems(): Array<CalendarEvent> {
    return this._listItems;
}

set myItems(value) {
    this._listItems = value;
}

// ngOnInit() {
//     this._events = this._calendarService.getCalendarEvents();
// }


ngOnInit() {

  this._events = this._calendarApiService.getCalendarEvents();


  this._calendarApiService.getCalendarData() 
  .subscribe( 
  (data:any)=>{ 
  this.listOfCalendar = data; 
  } 
  );

  //console.log(this.listOfCalendar);

}

onDateSelected(args: CalendarSelectionEventData) {
    const calendar: RadCalendar = args.object;
    const date: Date = args.date;
    const events: Array<CalendarEvent> = calendar.getEventsForDate(date);


    this.myItems = events;
}


}

【问题讨论】:

  • 如果可能的话,你能创建一个游乐场吗?这样会更容易调试。
  • 是否可以在 stackoverflow 中创建游乐场?我没有得到你的问题!我在这一行遇到错误this._events = this._calendarApiService.getCalendarEvents();
  • play.nativescript.org 使用它来显示您的代码。您可以使用 NS 预览应用在任何设备上运行
  • 当您选择模板并编辑时,它会显示保存按钮。保存后,您可以看到 URL 的更改,您可以复制它,例如play.nativescript.org/?template=play-vue&id=cD3cYS
  • @NarendraMongiya 立即查看! play.nativescript.org/?template=play-ng&id=J5wVUR

标签: angular typescript http nativescript angular2-nativescript


【解决方案1】:

要么你应该从你的方法中返回Array&lt;CalendarEvent&gt;,要么不指定任何类型。当您尝试将 Array 分配给 Observable&lt;Array&lt;CalendarEvent&gt;.

getCalendarEvents(){
         var listCal:any = []
         this.getCalendarData().pipe(map((data: any) => {
          listCal = data;
        console.log('list cal', listCal)
             let startDate: Date,
             endDate: Date,
             event: CalendarEvent;
             let colors: Array<Color> = [new Color(200, 188, 26, 214), new Color(220, 255, 109, 130), new Color(255, 55, 45, 255), new Color(199, 17, 227, 10), new Color(255, 255, 54, 3)];
             let events: Array<CalendarEvent> = new Array<CalendarEvent>();
             for (let i = 1; i < listCal.length; i++) {
                  event = new CalendarEvent(listCal[i].title, new Date(listCal[i].date), new Date(listCal[i].date), false, colors[i * 10 % (listCal[i].colour.length - 1)]);    

                  events.push(event);     
              }
             return events;
            }));          
    }

【讨论】:

  • 当我使用这段代码时,它仍然给我同样的错误! Type 'Observable&lt;CalendarEvent[]&gt;' is missing the following properties from type 'CalendarEvent[]': length, pop, push, concat, and 24 more.
  • 因为你正在返回 obserable`return` this.getCalendarData().pipe(map((data: any). 尝试删除它
  • 喜欢这个? return this.getCalendarData().subscribe((data: any) =&gt; {}
【解决方案2】:

使用from 运算符将数组转换为可观察的

return from(events);

【讨论】:

  • 找不到名称“来自”。导入的代码形式是什么
  • 我的方法已经在getCalendarEvents(): Observable&lt;Array&lt;CalendarEvent&gt;&gt;哪里写return from(events);在service.ts中?
  • 是的。导入 from 运算符。 import {from} from 'rxjs'
  • 当我导入from时,整个方法行都返回错误! Type 'Observable&lt;Observable&lt;CalendarEvent&gt;&gt;' is not assignable to type 'Observable&lt;CalendarEvent[]&gt;'. Type 'Observable&lt;CalendarEvent&gt;' is missing the following properties from type 'CalendarEvent[]': length, pop, push, concat, and 24 more.
猜你喜欢
  • 2020-09-09
  • 2019-04-28
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多