Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Escopo this

Olá. A pergunta pode fugir um pouco do projeto iniciado no curso, mas creio que minha dificuldade seja no TS pois o mesmo código JS funciona normalmente. Estou migrando minha api nodejs de JS para TS e ao utilizar o mongoose conforme o código abaixo, recebo uma mensagem de erro ao chamar "this" dentro do método "pre". Erro: element implicitly has an any type because type 'typeof globalThis' has no index signature. Creio que o erro está no contexto de "this" mas tentei mudar com "bind" e não consegui. Tentei mudar a utilização de arrow functions para function normal porém apresenta erro informando que a propriedade dataCadastro não existe em Document, ou seja no escopo global. Como fazer para o this referenciar meu escopo de objeto Schema?

const userFields = {
    nome: {
        type: String,
        trim: true,
        index: true,
        required: true
    },
    dataCadastro: { type: Date, default: Date.now, required: true }
}

let Schema = new mongoose.Schema(userFields, { versionKey: false });

Schema.plugin(autoIncrement, {inc_field: 'codigo'});

Schema.pre('save', next => {
    if (!this.dataCadastro)
        this.dataCadastro = new Date();
    next();
});;


export default Schema;
1 resposta
solução!

Fala ai Murilo, tudo bem? Como está seu tsconfig? Você desabilitou o "noImplicitAny": true? Se sim, tenta tirar ele.

Senão, acho que pode tentar contornar a situação definindo uma variável para this:

const myThis: ALGUM_TIPO = this

Outro detalhe, qual a versão do seu TS? Aqui eu fiz uso de this dentro de um hook do Mongoose sem problema algum.

Espero ter ajudado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software