как объявить статические методы mongoose, которые будут работать с ESLint - PullRequest
3 голосов
/ 09 апреля 2019

Использование Mongoose ORM для MongoDB

Я объявил статический метод Мангуста, например:

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

, а затем создайте модель с этим

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

но позже, когда я хочу вызвать метод:

let convoData = await ConvoData.randomItem()

Мой линтер не знает, что у ConvoData этот магический метод был исправлен на нем Мангустом.

Как я могу объявить эти методы так, чтобы Linter (TSLint / VSCode Intellisense) мог правильно обнаружить эти методы?

Ответы [ 3 ]

0 голосов
/ 14 мая 2019

Я бы подумал, что вы можете либо сказать ESLint «игнорировать» такие строки, либо вы можете стать действительно странным и сделать что-то вроде:

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

Отстой, что ни одно из решений не настолько элегантно, как я уверен, вы надеялись.

0 голосов
/ 14 мая 2019

Глядя в документацию я нашел это: https://mongoosejs.com/docs/guide.html#statics

Не объявляйте статику, используя функции стрелок ES6 (=>). Функции стрелок явно предотвращают привязку this , поэтому приведенные выше примеры не будут работать из-за значения this . "

Может быть, это твоя проблема?

0 голосов
/ 10 мая 2019

Если объявлено точно так:

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

, оно не будет работать, потому что метод не был закрыт.Вы должны попробовать закрыть метод.Далее, что именно возвращает метод, таким образом, мы можем правильно отладить метод.

...