问题
在我的用例中,我使用 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/