我开始学习打字稿的新冒险。我当然在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转换为打字稿,但我真的很喜欢它。
答案 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本身。它没有指向文档,因此它找不到任何方法和/或属性。