4
votes

comment déclarer des méthodes statiques mangouste qui fonctionneront avec ESLint

Utilisation de Mongoose ORM pour MongoDB

J'ai déclaré une méthode statique de mangouste comme:

let convoData = await ConvoData.randomItem()

puis j'ai créé un modèle avec cela

const ConvoData = mongoose.model('ConvoData', ConvoDataSchema)

mais plus tard quand je veux appeler la méthode:

ConvoDataSchema.statics.randomItem = async function () { ... }

Mon linter ne sait pas que ConvoData a eu ceci méthode magique corrigée dessus par Mongoose.

Comment puis-je déclarer ces méthodes pour qu'un Linter (TSLint / VSCode Intellisense) puisse découvrir correctement ces méthodes?


2 commentaires

J'utilise ESLint et VSCode , cela fonctionne correctement pour moi.


cela fonctionne sur la ligne que vous déclarez, mais dans d'autres fichiers, ESLint connaît-il la déclaration de la méthode ConvoData.xx () ? Je pense qu'ESLint peut analyser la syntaxe en ligne mais ne pas reconnaître l'objet auquel il est attaché pour les exportations.


4 Réponses :


-1
votes

Si déclaré exactement comme ceci:

ConvoDataSchema.statics.randomItem = async function () {
const ConvoData = mongoose.model('ConvoData', ConvoDataSchema)

cela ne fonctionnera pas car la méthode n'a pas été fermée. Vous devriez essayer de fermer la méthode. De plus, quelle est exactement la méthode retournée, de cette façon, nous pouvons correctement déboguer la méthode.


1 commentaires

ce n'était qu'un extrait de la source. Je l'ai expliqué plus clairement ci-dessus.



0
votes

Je pense que vous pouvez soit dire à ESLint d '"ignorer" des lignes comme ça, soit vous pouvez devenir vraiment bizarre et faire quelque chose comme:

let convoData = await ConvoDataSchema.statics.randomItem.call(ConvoData)

Je trouve qu'aucune des solutions n'est aussi élégante que Je suis sûr que vous espériez.


0 commentaires

0
votes

En regardant dans la documentation, j'ai trouvé ceci: https://mongoosejs.com/docs/guide .html # statique

Ne déclarez pas de statique à l'aide des fonctions fléchées ES6 (=>). Les fonctions fléchées empêchent explicitement de lier this , donc les exemples ci-dessus ne fonctionneront pas en raison de la valeur de this . "

Cela peut-il être votre problème?


1 commentaires

cela pourrait être un problème d'exécution. Mais le linter au moment de la compilation et intellisense ne peut pas vraiment résoudre ce genre de problèmes. Peut-être qu'un véritable linter d'analyse AST le pourrait, mais je ne pense pas qu'ESLint soit dans cette catégorie.



0
votes


0 commentaires