对象文字只能指定已知属性,'ChatMessage []'类型中不存在'message'

时间:2017-11-28 22:40:27

标签: angular typescript

我在sendMessage函数的chat.services.ts中收到错误。 我试图做一个异步管道,但它不是从我的chat-message.model.ts读取对象

这是我在 chat-message.model.ts

中的代码
export class ChatMessage {
$key?: string;
email?: string;
userName?: string;
message?: string;
timeSent?: Date = new Date();
 }

这也是我的 chat.services.ts

中的代码
sendMessage(msg: string){
const timestamp = this.getTimeStamp();
const email = 'test@example.com';
this.chatMessages = this.getMessage();
this.chatMessages.push({
  message: msg,
  timeSent: timestamp,
  userName: 'test-user',
  email: email });

    getMessage(): AngularFireList<ChatMessage[]> {
    // Query to create  Message Feed Binding
    console.log('Calling getMessages()!')
    return this.db.list('messages')

}  

我觉得这很明显,但代码对我来说确实很好。

我觉得它可能与$ key有关?

1 个答案:

答案 0 :(得分:0)

这是我的代码的简短版本,它解释了我希望看到错误的位置。首先,这是一个演示代码的工作位:

export class ChatMessage {
    $key?: string;
    email?: string;
    userName?: string;
    message?: string;
    timeSent?: Date = new Date();
}

const chatMessages: ChatMessage[] = [];

chatMessages.push({
    message: 'Message',
    timeSent: new Date(),
    userName: 'test-user',
    email: 'fenton@example.com'
});

你得到的错误说:

  'ChatMessage []'

类型中不存在

'message'

这很有趣......这意味着它认为chatMessages: ChatMessage[]看起来更像ChatMessage[][](即包含聊天消息数组的数组)。

因此,通过使用注释将错误移动到有趣的行来测试理论:

this.chatMessages: ChatMessage[] = this.getMessage();

我预计此行会出错,因为this.getMessage();返回的类型不是ChatMessage[]

如果您仍然卡住,请向我们提供getMessage()方法。