Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度5,打字脚本可观察问题_Angular_Typescript_Observable - Fatal编程技术网

Angular 角度5,打字脚本可观察问题

Angular 角度5,打字脚本可观察问题,angular,typescript,observable,Angular,Typescript,Observable,正在尝试让消息传递应用程序工作,但我似乎无法通过TS错误 编辑器语法检查器-显示此错误 类型“Observable”不可分配给类型“Observable”。 类型“{}”不可分配给类型“MessageThread[]”。 类型“{}”中缺少属性“includes” 代码 import { Injectable } from '@angular/core'; import { Http, Response, Headers, RequestOptions } from '@angular/http

正在尝试让消息传递应用程序工作,但我似乎无法通过TS错误

编辑器语法检查器-显示此错误 类型“Observable”不可分配给类型“Observable”。 类型“{}”不可分配给类型“MessageThread[]”。 类型“{}”中缺少属性“includes”

代码

import { Injectable } from '@angular/core';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import * as io from 'socket.io-client';

import { MessageThread } from './message-thread.model';

@Injectable()
export class MessageThreadService {

    private getMessageThreadsUrl = 'api/message-thread/get';  // URL to web API
    private postMessageThreadsUrl = 'api/message-thread/post';  // URL to web API

    constructor(private http: Http) { }

    private socket;
    private url = window.location.origin;

    /*
    * Get MessageThreads from server
    */
    getMessageThreads(): Observable<MessageThread[]> {
        const observable = new Observable(observer => {
            console.log('Socket:', this.url);
            this.socket = io(this.url);
            this.socket.on('refreshMessageThreads', (data) => {
                observer.next(data);
            });

            return () => {
                this.socket.disconnect();
            };
        });

        return observable; // **** THIS LINE SHOWS ERROR ****
    }

...

非常感谢您的帮助。

问题的关键在于这部分错误:

类型“Observable”不可分配给类型“Observable”。 类型“{}”不可分配给类型“MessageThread[]”

当您创建一个需要泛型的类的实例时,TypeScript会将该泛型默认为{},而不能在其他地方进行推断。在这种情况下,这两者是相同的:

const observable = new Observable(observer => {
const observable = new Observable<{}>(observer => {
然后,当您试图将Observable返回给为返回Observable而键入的函数时,它会发出抱怨。解决方案是自己指定泛型:

const observable = new Observable<MessageThread[]>(observer => {

您没有为随处可见的对象提供泛型类型,因此它默认为{},它不是消息线程数组。
const observable = new Observable<MessageThread[]>(observer => {