Angular 角度5,打字脚本可观察问题
正在尝试让消息传递应用程序工作,但我似乎无法通过TS错误 编辑器语法检查器-显示此错误 类型“Observable”不可分配给类型“Observable”。 类型“{}”不可分配给类型“MessageThread[]”。 类型“{}”中缺少属性“includes” 代码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
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 => {