【问题标题】:Object Literal May Only Specify Known Properties对象字面量只能指定已知属性
【发布时间】:2018-09-06 15:22:14
【问题描述】:

我正在学习如何按照 youtube 视频系列创建 Angular Firebase 聊天:https://www.youtube.com/watch?v=-j0LVc-zLh0

在这里,我正在开发一个聊天服务(chat.service.ts),如下所示:

import {
    Injectable
} from '@angular/core';
import {
    AngularFireList, AngularFireDatabase
} from 'angularfire2/database';
import {
    AngularFireAuth
} from 'angularfire2/auth';
import {
    Observable
} from 'rxjs/Observable';
import {
    ChatMessage
} from '../models/chat-message.model';
import {
    AuthService
} from '../services/auth.service';
import * as firebase from 'firebase/app';



@Injectable()
export class ChatService {
    user: any;
    chatMessages: AngularFireList < ChatMessage[]> ;
    chatMessage: ChatMessage;
    userName: Observable<string>;

    constructor(
        private db: AngularFireDatabase,
        private angularFireAuth: AngularFireAuth
    ) {
        // this.angularFireAuth.authState.subscribe(auth => {
        //  if (auth !== undefined && auth !== null) {
        //      this.user = auth;
        //  }
        // })

    }

    sendMessage(msg: string) {
        const timestamp = this.getTimestamp();
        // const email = this.user.email;
        const email = "ex@ex.com";
        this.chatMessages = this.getMessages();
        this.chatMessages.push({
            message: msg,
            timeSent: timestamp,
            userName: this.userName,
            email: email
        }); 
    }

    getMessages(): AngularFireList<ChatMessage[]> {
        return this.db.list('messages', ref => ref.orderByKey().limitToLast(25)
        // console.log("test ok")
    )};

    getTimestamp() {
        const now = new Date();
        const date = now.getUTCFullYear() + '/' + (now.getUTCMonth() + 1) + '/' + now.getUTCDate();
        const time = now.getUTCHours() + ':' + (now.getUTCMinutes()) + ':' + now.getUTCSeconds();
        return (date + ' ' + time);
    }
}

在 sendMessage 函数中,当我尝试将收到的消息推送到 ChatMessages[] 时,message: msg 行被标记为错误,并且我在终端中收到以下错误消息。

src/app/services/chat.service.ts(48,4) 中的错误:错误 TS2345: '{ message: string; 类型的参数时间发送:字符串;用户名: 可观察的;电子邮件:字符串; }' 不可分配给参数 'ChatMessage []' 类型。对象字面量只能指定已知 属性,并且“ChatMessage[]”类型中不存在“消息”。

谁能帮我解决这个问题?

【问题讨论】:

  • 订阅你的 observable 然后推送

标签: angular firebase firebase-realtime-database


【解决方案1】:

ChatMessage 后面不需要括号。

 getMessages(): AngularFireList<ChatMessage> {
        return this.db.list('messages', ref => ref.orderByKey().limitToLast(25)
        // console.log("test ok")
    )};

如果在此之后它仍然不起作用,那么在推送之前订阅您的用户名。

this.chatMessages.push({
            message: msg,
            timeSent: timestamp,
            userName: this.userName,----subscribe it
            email: email
        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 2021-02-18
    • 2021-09-27
    相关资源
    最近更新 更多