簡體   English   中英

為什么 vscode 不能自動完成導出的對象,從一個文件到另一個文件,在 nodejs 中? 它是性能特征嗎?

[英]Why's that vscode cant autocomplete exported objects on its own, from one file in another, in nodejs? Is it a performance feature?

問題

在我的用例中,我使用sequelize在單獨的文件models/index.js中維護我的數據庫配置/連接。 export數據庫連接對象(稱為db ),以便其他模塊可以連接到數據庫。 但是當我在其他文件中require object 時,不會顯示該 object 或其相應屬性的自動完成。

語境

這就是我的models/index.js /index.js 文件的一部分的樣子,就像官方的續集示例一樣:-

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我的數據庫連接 object db時,它應該為我靜態分配的屬性提供自動完成,比如db.sequelize應該是一個完成,然后是db.sequelize.xxx ,其中xxx是相應的續集方法和屬性也應該自動完成。

現在是什么行為?

鍵入db. 沒有顯示任何與 object db相關的有效自動完成。 db.sequelize也有一個用於sequelize部分的類型any (所以沒有進一步的自動完成),而我希望它是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": ["./**/*"],
}

如果你改變你的 object let db = {}; let db = {sequelize: null}; ,您將獲得智能感知按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM