Автоматическое предложение не работает после инициализации переменной в блоке beforeEach

#javascript #visual-studio-code #mocha.js

#javascript #visual-studio-code #mocha.js

Вопрос:

Автоматическое предложение не работает ни для одной переменной, объявленной в блоке beforeEach. Если я использую переменную «app» в блоке it(), автоматическое предложение не показывает ни один из методов. Автоматическое предложение работает в блоке beforeEach. При нажатии Ctrl Пробел отображаются все доступные методы. Я использую Visual studio code в качестве IDE. Mocha — это платформа тестирования.

 var express = require('express')

describe("#1", async () => {

    let app 

    beforeEach("SetUp", async () => {       
        app = express();   
        app. // First,  Auto suggest is working on pressing Ctrl   Space
    })

    it("Demo Test #1.1", async () =>{

        app.  //Second, Auto suggest not working on pressing Ctrl   Space
       
   })

})
  

Ответ №1:

Редактировать: Если вы не хотите идти ва-банк с TypeScript, вы можете сделать это с помощью JSDoc, если вы не возражаете против добавления @type аннотаций, где объявлены непереводимые переменные.

 const express = require("express")

describe("#1", async () => {
  /** @type {express.Express} */
  let app

  beforeEach("SetUp", () => { app = express() })

  it("Demo Test #1.1", async () => {
    app // autocomplete is now available here
  })
})
  

Оригинальный ответ ниже

VS Code не может вывести информацию о типе переменной, установленной в обратном вызове.

Рассмотрим следующий упрощенный пример:

 let variable

foo(() => {       
    variable = 1
})

bar(() => {       
    variable = 'str'
})

main(() =>{
    // what type is `variable` here?
})
  

Если вы хотите переключиться на TypeScript, это можно решить, добавив аннотацию к объявлению:

 let app: Express
  

ДЕМОНСТРАЦИЯ

 const nonDeterministicTimeout = () =>
    cb => setTimeout(cb, Math.random() * 100)

for (let i = 0; i < 10;   i) {
    const foo = nonDeterministicTimeout()
    const bar = nonDeterministicTimeout()
    const main = nonDeterministicTimeout()

    let variable

    foo(() => {       
        variable = 1
    })

    bar(() => {       
        variable = 'str'
    })

    main(() =>{
        console.log(typeof variable)
        // fluctuates arbitrarily between
        // undefined, string, and number
    })
}  

Комментарии:

1. Есть ли какой-либо другой способ заставить это работать, а не использовать typescript.

2. Вы можете попробовать с JSDoc . Ответ отредактирован с информацией.

3. Спасибо Лайонелу Роу. Это работает. Действительно ценю вашу помощь.