![](/img/trans.png)
[英]Type 'Object' is not assignable to type 'any[]' in Angular 4.x app
[英]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.