【问题标题】:Cannot insert a object into a database from an array in angular2/meteor无法将对象从 angular2/meteor 中的数组插入数据库
【发布时间】:2017-06-07 10:37:42
【问题描述】:

我正在尝试使用我自己的类型“class”而不是“party”来完成 Angular2/Meteor 教程,但我在这行代码中遇到了错误

classes.forEach((class: Class) => Classes.insert(class));

这是整个文件:

import { Classes } from '../../../both/collections/classes.collection';
import { Class } from '../../../both/models/class.model';

export function loadClasses() {
 if (Classes.find().cursor.count() === 0) {
const classes: Class[] = [{
  name: 'Class1',
  teacher: 'Dumbledore',
  location: 'room 101'
}, {
  name: 'Class2',
  teacher: 'Hagrid',
  location: 'Online'
}, {
  name: 'Class3',
  teacher: 'Harry Potter',
  location: 'room 124'
}];

classes.forEach((class: Class) => Classes.insert(class));

 }

}

这是错误代码以及其他大部分内容相同的内容。

server/imports/fixtures/classes.ts (20, 54):“typeof(匿名类)”类型的参数不能分配给“Class”类型的参数。

不确定是否只是读错了,我需要重置一些东西。我已经多次梳理了我的代码,但找不到任何语法/拼写错误。我尝试了“流星重置”以防万一,但没有运气。

【问题讨论】:

  • 所以我有这个class.model.ts文件导出接口类{名称:字符串;老师:字符串;位置:字符串; } 这就是你的意思吗?

标签: angular meteor typescript


【解决方案1】:

我怀疑 Typescript 不喜欢你使用 ES6 保留字 class(小写)作为参数名称。

尝试将其替换为其他内容(例如 currentClass 或其他保留字除外)。

使用Class(大写首字母)作为类或接口名称是合法的,但肯定会导致迟早会在错误的位置使用保留字class

【讨论】:

  • 是的,保留字是问题所在,制作课程计划应用程序时真的很痛苦哈哈。
【解决方案2】:

我想我发现了你正在做的错误。 这是你做错的代码

classes.forEach((class: Class) => Classes.insert(class));

在这个 classes.forEach 中应该适用于您要插入数据库的数组。在这个循环中,您希望将每个类插入到您的数据库表中。并且您将数组名称和数据库集合名称都视为错误的类。它如何区分?

试试这样的代码

if (Head.find().cursor.count() === 0) {
      const heads = [
      { head: 'javascript'}, 
      { head: 'angularjs'}
      ];
    heads.forEach((defaulthead) => Head.insert(defaulthead));
  }

我同意 ghybs 的回答。你不应该使用保留字。保留字(如 JavaScript 关键字)不能用作名称

【讨论】:

    猜你喜欢
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 2013-06-10
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多