簡體   English   中英

角度2/4 | 類型“ {}”不可分配給類型“對象[]”

[英]Angular 2/4 | Type '{}' is not assignable to type 'Object[]'

我目前遇到一個無法解決的怪異錯誤。 我有一個用於處理我的socket.io websocket的SocketIoService。

套接字服務

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

import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject';
import 'rxjs/add/operator/map';
import { Socket } from 'ng-socket-io';


@Injectable()
export class SocketioService {

    getRecentMessages(){
        this.socket.emit('messages');
        return this.socket
        .fromEvent("messages")
        .map( data => data );
    }


    constructor(private socket:Socket) {
        console.log('[i] socketio service connected');
    }

}

我從我的ChatComponent訂閱了可觀察的getRecentMessages()

聊天組件

import { Component, OnInit } from '@angular/core';
import { SocketioService } from '../../services/socketio.service';

@Component({
    selector: 'app-chat',
    templateUrl: './chat.component.html',
    styleUrls: ['./chat.component.css']
})
export class ChatComponent implements OnInit {

    messages:Object[] = [];

    constructor(
        private socketioService:SocketioService
    ) {}

    ngOnInit() {
        this.socketioService.getRecentMessages().subscribe(messages => {
            console.log('SOCKET received chat/messages DATA', messages);
            this.messages = messages;
        });
    }


}

初始化Chat.Component.ts時,它訂閱getRecentMessages()。 然后,該函數會發送到我的后端服務器,並且該服務器將響應一系列最新消息。 看起來像這樣: https : //gyazo.com/ecedc406fec48a4e1224ae2aa47844d0

我嘗試將message數組設置為與Chat.Component.ts中的響應相等,但是出現錯誤類型'{}'無法分配給類型'Object []'。 這意味着Angular / Typescript以某種方式認為響應是對象而不是數組。 我該如何解決? 謝謝 :)

只是改變

  messages:Object[] = [];

  messages:any = [];

如果getRecentMessages()返回字符串數組,則應將可觀察對象強制轉換為數組,例如

this.socketioService.getRecentMessages()<string[]>.subscribe(...)

嘗試這樣:

messages:Object[] = [];

裝的

private messages: Array<any> = [];

嘗試為對象模型創建接口,例如:

export interface Message {
    _id: string,
    updated_at: Date,
    created_at: Date,
    ...
}

然后導入到您的組件中,並將變量初始化為Message對象的數組:

messages: Message[];

修正:終於找到了解決方案。.我瀏覽了我用來處理socket.io的ng-socket-io模塊。 該功能

https://gyazo.com/43a45d65ba56997f4ea401653cb75416

可以采用可觀察對象的類型參數。 在我的socketio.service中,我將其添加到.fromEvent之后:

getRecentMessages(){
    this.socket.emit('messages');
    return this.socket
    .fromEvent<Object[]>("messages")
    .map( data => data );
}

現在可以完美運行。 感謝所有回答我問題的人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM