javascript - 为什么 vscode 不能自动完成导出的对象,从一个文件到另一个文件,在 nodejs 中?它是性能特征吗?

标签 javascript node.js visual-studio-code sequelize.js

问题

在我的用例中,我使用 sequelize 维护我的数据库配置/连接在单独的文件中 models/index.js .我 export数据库连接对象(称为 db ),以便其他模块可以连接到数据库。但是当我require其他文件中的对象,则不会显示该对象或其相应属性的自动完成。

语境

这就是我的 models/index.js 的一部分文件看起来像,我已经像官方 sequelize example 那样做了:-

const { Sequelize } = require('sequelize');
const sequelize = new Sequelize(config);
let db = {};
// for each of the files `file` in a dir...dynamically do(refer above linked example for details):-
let model = require(path.join(__dirname, file))(sequelize, Sequelize);
db[model.name] = model; // type Sequelize.Model
// dynamic config over

// statically add
db.sequelize = sequelize; // type Sequelize
module.exports = db

这就是我在另一个模块中导入的方式:-

const db = require("./models/index.js");
db.seq -------------------------------> where i try for auto-completion

期待

当我require我的数据库连接对象 db在另一个文件中,它应该为我静态分配的属性提供自动完成功能,例如 db.sequelize应该是一个完成和进一步db.sequelize.xxx , 其中 xxx是对应的sequelize方法和属性也应该是自动完成的。

现在是什么行为?

打字 db.不显示与对象 db 相关的任何有效自动完成.还有db.sequelize有一个类型 any对于sequelize部分(所以没有进一步的自动完成),而我预计它是 Sequelize .

我做了什么?
  • 明确添加 jsdoc ,认为这是使自动完成工作的唯一方法,但没有用:-

  • /**
    * @typedef {import('sequelize').Sequelize} Sequelize
    */
    
    const { Sequelize } = require('sequelize');
    /**
     * @type {Sequelize}
     */
    const sequelize = new Sequelize(config);
    /**
     * key : string -> Name of the Sequelize.Model | 'sequelize'
     * value : Either one of the Models or Sequelize object
     * @type {Object.<string,(Sequelize|Sequelize.Model)>}
     * @property {Sequelize} sequelize
     * @example
     * db = { User: db.User , seqeuelize : sequelize}
     */
    let db = {};
    // rest of the dynamic processing and adding Sequelize.Model to db
    db.sequelize = sequelize;
    module.exports = db
    
  • 添加了 jsconfig.json具有以下内容,但这也是徒劳的:-

  • {
      // NOTE THAT, this file resides within my src/server/ directory where all the js files exists
      // the models/index.js resides within src/server
      // I maintain another jsconfig for src/client
      "compilerOptions": {
        "module": "commonjs",
        "target": "es6",
        "allowSyntheticDefaultImports": true,
        "moduleResolution": "node",
        "experimentalDecorators":true,
        "baseUrl": ".",
        "paths": {
          "*": ["*"],
        },
      },
      "include": ["./**/*"],
    }
    

    最佳答案

    如果您更改对象 let db = {};let db = {sequelize: null}; ,您将获得智能感知按预期工作。

    关于javascript - 为什么 vscode 不能自动完成导出的对象,从一个文件到另一个文件,在 nodejs 中?它是性能特征吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61743134/

    相关文章:

    Javascript:使用动态信息更新 src

    node.js - AWS beanstalk Nodejs 多核

    node.js - 如何将 MEAN.js (Node.js) 应用程序部署到生产环境

    node.js - 如何在 mac 中使用 sudo 调试 VSCode 中的 Node ?

    javascript - 如何确保所有 JavaScript 错误都写入 Chrome 开发者工具控制台?

    javascript - 添加行后如何避免下拉重复[AngularJS]

    node.js + socket.IO - 套接字没有重新连接?

    visual-studio-code - VS Code中的多行列复制粘贴

    node.js - 可以将 Visual Studio Code 配置为使用 nodemon 启动吗

    javascript - 如何在jquery中仅重新加载元素