[英]Return variable from exported module and use it in another file (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.