将mongoose javascript代码转换为typescript。这个参考丢失了

时间:2016-05-10 07:35:11

标签: javascript mongodb mongoose typescript

我开始学习打字稿的新冒险。我当然在javascript中编写了一个nodejs项目,并将其转换为typescript。我的想法是看到所有的好处,并了解问题的位置,我应该使用哪种模式等等 该项目使用mongodb数据库和mongoose javascript库,我正在努力解决打字机如何编译代码的问题。简单来说:我失去了这个参考 以下是导致问题的好例子。

 var personSchema = new mongoose.Schema({
  created: {
   type: Date,

   default: Date.now
  },

  updated:{
   type: Date,  
  },
 });

 personSchema.pre('save', function(next) {

 // Make sure updated holds the current date/time

 this.updated = new Date();

 next();

 });

 var Person = mongoose.model('Person', personSchema);

在预保存功能中,有引用。这是具有更新属性的当前人员的参考。一切都好。我在不同的例子中看到了这种模式

这是我第一次在nodejs项目上工作 以下是我尝试简单的打字稿转换的方法:

 interface IPerson extends mongoose.Document{
  created:Date;
  updated:Date;
}


 var personSchema = new mongoose.Schema({
  created: {
   type: Date,
   default: Date.now
 },

 updated: {
  type: Date
 }
});

personSchema.pre('save', (next) => {
 // Make sure updated holds the current date/time
 this.updated = new Date();

 next();
});

export =  mongoose.model<IPerson>('Person', personSchema);

在打字稿之后,将代码与 _this 交换。在文件的顶部,您会看到 var _this = this; 。这是错的。新的javascript文件丢失了person对象的引用。

有人可以帮助我如何正确地将javascript转换成打字稿吗?我该如何解决这类问题?有一些模式吗?
我的第一印象是,有时不是直接将javascript转换为打字稿,但我真的很喜欢它。

2 个答案:

答案 0 :(得分:0)

试试这个:

var personSchema = new mongoose.Schema({
    created: {
       type: Date,
       default: Date.now
    },

    updated: {
        type: Date
    }

    saveHandler(next) {
        // Make sure updated holds the current date/time
        this.updated = new Date();

        next();
    }
});

personSchema.pre('save', personSchema.saveHandler);

答案 1 :(得分:0)

所以这个问题有点陈旧,我不确定你是否已经解决了,但没有选择答案,所以这可能有助于其他人。

我自己也有点挣扎,我相信我已经明白了。

另外,考虑到每个代码都不同,所以这可能无法解决所有问题,但尝试摆脱箭头功能。改为使用常规功能。

ES6的箭头功能使用词法作用域,所以“this”不是你在这种情况下实际期望的。它很可能,嗯......未定义,或者Schema本身。它没有指向文档,因此它找不到任何方法和/或属性。