将 mongoose javascript 代码转换为 typescript。此参考丢失

Posted

技术标签:

【中文标题】将 mongoose javascript 代码转换为 typescript。此参考丢失【英文标题】:Convert mongoose javascript code to typescript. This reference lost 【发布时间】:2016-09-05 01:10:07 【问题描述】:

我开始了学习打字稿的新冒险。我拿了一个用 javascript 编写的 nodejs 项目,并将其转换为打字稿。我的想法是看到所有好处并了解问题出在哪里,我应该使用哪种模式等等。 该项目将 mongodb 数据库与 mongoose javascript 库一起使用,我正在努力解决 typescript 如何转译代码。简而言之:我失去了这个参考。 这是一个很好的例子,会导致问题。

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

在预保存功能中有一个 this 引用。这是具有更新属性的当前人员的引用。一切顺利。我在不同的例子中看到了这种模式 这是我第一次从事 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);

在 typescript 转译代码后 this 与 _this 交换。在文件顶部您会看到 var _this = this;。这是错误的。新的 javascript 文件失去了对 person 对象的引用。

有人可以帮助我如何正确地将 javascript 转换为 typescript 吗?我应该如何解决这类问题?有什么规律吗? 我的第一印象是有时不是直接将 javascript 转换为 typescript,但我真的很喜欢。

【问题讨论】:

【参考方案1】:

试试这个:

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

【讨论】:

【参考方案2】:

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

我自己也为此苦苦挣扎了一阵子,但我相信我已经弄明白了。

另外,考虑到每个代码都是不同的,所以这可能不会在每种情况下都能解决,但请尝试摆脱箭头函数。请改用常规函数。

ES6 的箭头函数使用词法作用域,因此在这种情况下,“this”并不是您真正期望的。很可能,嗯......未定义,或者架构本身。它没有指向文档,因此它不会找到它的任何方法和/或属性。

【讨论】:

以上是关于将 mongoose javascript 代码转换为 typescript。此参考丢失的主要内容,如果未能解决你的问题,请参考以下文章

javascript 使用Mongoose将数据插入MongoDB

如何使用 Mongodb 或 Mongoose 查询并使用 javascript 打印?

在 javascript 中连接到 mongoose 数据库时出错

转:Mongoose使用操作

在 Mongoose 查询中使用 javascript Promise

如何在 JavaScript 中使用 Mongoose 动态更新文档?