“this”隐式具有类型“any”,因为它没有类型注释。ts(2683)

Say*_*man 2 node.js typescript

userSchema.pre('save', async function(done) {
    if (this.isModified('pass')) {
        const hashed = await Password.toHash(this.get('pass'));
        this.set('pass', hashed);
    }
    done();
});
Run Code Online (Sandbox Code Playgroud)

我从“this”中收到以下错误:

“this”隐式具有类型“any”,因为它没有类型注释。ts(2683)

我听说问题出在方向键上,但我没有在回调函数中使用方向键?我仍然收到错误。是什么赋予了?

我还从“完成”中收到错误:

参数“done”隐式具有“any”类型。ts(7006)

这可能是 Visual Studio Code 的某种错误吗?

Alu*_*dad 7

这不是 VS Code 或 TypeScript 中的错误。原因很简单,TypeScript 调用中没有足够的信息来确定thisMongoose 最终执行该函数时将绑定到什么。

假设您有一个名为 的类型User,您可以使用显式this类型注释来修复此问题。

userSchema.pre('save', async function(this: User, done) {
    if (this.isModified('pass')) {
        const hashed = await Password.toHash(this.get('pass'));
        this.set('pass', hashed);
    }
    done();
});
Run Code Online (Sandbox Code Playgroud)

请注意,用于指定 , 类型的语法this是一种特殊语法,因为它不会在生成的 JavaScript 中发出参数:

function(this: X) {}
Run Code Online (Sandbox Code Playgroud)

编译为

function() {}
Run Code Online (Sandbox Code Playgroud)