将 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 数据库时出错