如何从 NodeJS 文件中正确导出 类?
How to properly export classes from NodeJS file?
我想在以下文件中导出我的 类。我试过这个:
const Discord = require('discord.js');
class Client extends Discord.Client {}
class PermissionNode {}
class PermissionNodesManager {}
module.exports.Client = Client;
module.exports.PermissionNode = PermissionNode;
module.exports.PermissionNodesManager = PermissionNodesManager;
这不会引发任何错误,但 Visual Studio 代码的 IntelliSense 自动完成功能无法正常工作。在类型中显示 any
。
我只是想像这样要求这个文件:
const Classes = require('those/exported/classes.js');
并像这样使用它:
let another_client = new Classes.Client();
或者像这样:
const MB = require('classes.js');
/**
* @param {MB.Client} client
* @param {MB.PermissionNode} node
* @param {MB.PermissionNodesManager} manager
*/
let func = (client, node, manager) => {}
两种方式都不行。 IntelliSense 显示如下内容:https://imgur.com/a/McW0Xv8
如何导出那些 类 以便 IntelliSense 工作?
您可以添加 JSDoc 样式的注释块以提供 VSCode 提示:
/**
* @returns {Client}
*/
module.exports.Client = Client;
/**
* @returns {PermissionNode}
*/
module.exports.PermissionNode = PermissionNode;
/**
* @returns {PermissionNodesManager}
*/
module.exports.PermissionNodesManager = PermissionNodesManager;
添加这些后,IntelliSense 正确显示类型:
一个快速解决方法(不推荐)如下(“命名”?/解构要求)。
我不知道为什么这行得通而 OP 的方法却行不通。
const { Client } = require('./module.js');
/**
* @type {Client}
*/
let x;
x. // intellisense (correct): addListener, channels, ...
只是附带说明,以下内容无效。
const M1 = require('./module.js');
const { Client } = M1;
/**
* @type {Client}
*/
let x;
x. // intellisense (wrong): apply, arguments, bind, ...
我不知道 VSCode and/or TypeScript 内部发生了什么会导致这种行为——我的理解是这些代码片段是等效的。
我想在以下文件中导出我的 类。我试过这个:
const Discord = require('discord.js');
class Client extends Discord.Client {}
class PermissionNode {}
class PermissionNodesManager {}
module.exports.Client = Client;
module.exports.PermissionNode = PermissionNode;
module.exports.PermissionNodesManager = PermissionNodesManager;
这不会引发任何错误,但 Visual Studio 代码的 IntelliSense 自动完成功能无法正常工作。在类型中显示 any
。
我只是想像这样要求这个文件:
const Classes = require('those/exported/classes.js');
并像这样使用它:
let another_client = new Classes.Client();
或者像这样:
const MB = require('classes.js');
/**
* @param {MB.Client} client
* @param {MB.PermissionNode} node
* @param {MB.PermissionNodesManager} manager
*/
let func = (client, node, manager) => {}
两种方式都不行。 IntelliSense 显示如下内容:https://imgur.com/a/McW0Xv8
如何导出那些 类 以便 IntelliSense 工作?
您可以添加 JSDoc 样式的注释块以提供 VSCode 提示:
/**
* @returns {Client}
*/
module.exports.Client = Client;
/**
* @returns {PermissionNode}
*/
module.exports.PermissionNode = PermissionNode;
/**
* @returns {PermissionNodesManager}
*/
module.exports.PermissionNodesManager = PermissionNodesManager;
添加这些后,IntelliSense 正确显示类型:
一个快速解决方法(不推荐)如下(“命名”?/解构要求)。
我不知道为什么这行得通而 OP 的方法却行不通。
const { Client } = require('./module.js');
/**
* @type {Client}
*/
let x;
x. // intellisense (correct): addListener, channels, ...
只是附带说明,以下内容无效。
const M1 = require('./module.js');
const { Client } = M1;
/**
* @type {Client}
*/
let x;
x. // intellisense (wrong): apply, arguments, bind, ...
我不知道 VSCode and/or TypeScript 内部发生了什么会导致这种行为——我的理解是这些代码片段是等效的。