打字稿 - 在箭头(回调)函数中使用它 - 猫鼬

Posted

技术标签:

【中文标题】打字稿 - 在箭头(回调)函数中使用它 - 猫鼬【英文标题】:Typescript - use this in arrow ( callback ) function - mongoose 【发布时间】:2018-04-22 03:27:09 【问题描述】:

如何在箭头中使用这个关键字(回调函数)。我在课堂上创建猫鼬模式。看看吧。

class UserSchema 
    private userSchema: Schema;

    constructor() 
        this.setSchema();
    

    public getUserSchema(): Schema 
        return this.userSchema;
    

    private setSchema() 
        this.userSchema = new Schema(
            createdAt: Date,
            uptadedAt: Date,
            email: String,
            password: String
        );

        this.preSave();
    

    private preSave() 
        this.userSchema.pre('save', (next: NextFunction) => 
            /*
                Here
            */
            if(this.createdAt)
                this.createdAt = new Date();
            next();
        );
    

如您所见,我添加了评论。我想访问 createdAt 以将 Date 添加到变量中,但我无法访问此关键字:( 有什么想法吗?

【问题讨论】:

【参考方案1】:

我没有在 Mongoose 中尝试过,但这是我通常在类中使用箭头函数的方式:只需创建一个新方法并引用它。它可以防止“回调金字塔”并且this 一直引用类实例

class UserSchema 
    private preSave() 
        this.userSchema.pre('save', (next: NextFunction) => this.doSomething(next))
    
    private doSomething(next:NextFunction) 
        console.log(this)
        console.log("this should be the UserSchema instance")
        if(this.createdAt) 
                this.createdAt = new Date()
        
        next()
    

【讨论】:

同样的错误。获取“UserSchema 类型上不存在属性 createdAt”。嗯..当我尝试在 setSchema 中 console.log(this.userSchema.createdAt) 得到同样的错误。这段代码有问题吗? 好的,找到了解决方案。只需使用 this.userSchema.get('createdAt') 并设置 :) 无论如何感谢您的帮助

以上是关于打字稿 - 在箭头(回调)函数中使用它 - 猫鼬的主要内容,如果未能解决你的问题,请参考以下文章

带有箭头功能的打字稿装饰器

打字稿装饰器不能使用箭头函数

在打字稿中应用箭头函数作为对象属性

带有箭头函数的打字稿重载方法

使用猫鼬模型设置打字稿

打字稿:猫鼬模式的静态方法