首页 文章

对象文字可能只指定已知属性

提问于
浏览
0

我正在研究如何在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; timeSent:string; userName:Observable;电子邮件:string; }'不能分配给'ChatMessage []'类型的参数 . 对象文字只能指定已知属性,'ChatMessage []'类型中不存在'message' .

有人可以帮我这个吗?

1 回答

  • 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
            });
    

相关问题