Javascript Node.js中的函数导出在VSCode中显示为属性
这在技术上并没有错,所以我没有在GitHub上作为bug进行归档,但似乎应该有更好的行为(或者可能有更好的方式定义导出) 假设我有:Javascript Node.js中的函数导出在VSCode中显示为属性,javascript,node.js,visual-studio-code,Javascript,Node.js,Visual Studio Code,这在技术上并没有错,所以我没有在GitHub上作为bug进行归档,但似乎应该有更好的行为(或者可能有更好的方式定义导出) 假设我有: function one() { // do stuff } function two() { one() } module.exports = {one, two}; 当我需要此模块时,在另一个文件中,one和two显示为对象属性(蓝色图标)。VSCode似乎没有认识到它们实际上是函数。如果定义命名的匿名函数,例如module.export
function one() {
// do stuff
}
function two() {
one()
}
module.exports = {one, two};
当我需要此模块时,在另一个文件中,one
和two
显示为对象属性(蓝色图标)。VSCode似乎没有认识到它们实际上是函数。如果定义命名的匿名函数,例如module.exports={one:function(){},则这是相同的行为代码>这样写很有意义。但是,如果我只是想让一个函数在导出中显示为函数,那么我似乎能让它工作的唯一方法是:
module.exports = {
one() { /* do stuff */ },
two() { /* do more stuff */},
};
这在某些情况下有效,但如果two
需要调用one
并且两个函数都需要导出,则必须使用This.
访问其他成员
如何在一个模块中定义一组可以相互利用的函数,并将它们全部导出,以便它们在VSCode的其他模块中显示为函数(紫色图标)
编辑
这里的问题是让VSCode在从其他模块需要函数时识别并提示函数本身,而不是将它们显示为模块的“属性”。这种方法可以让您导出函数并调用本地函数:
let self = {
one: function() {
return 'one';
},
two: function() {
return self.one();
}
};
module.exports = self;
另一方面,如果您的蓝色图标仍然没有显示,您可以命名您的功能:
let self = {
one: function SayOne() {
return 'one';
},
two: function CallOne() {
return self.one();
}
};
module.exports = self;
最后,您可以通过以下方式导入函数:
const { one, two } = require('./your_file');
console.log(two());
从Javsscript的观点来看,您的两个模块.exports
语句之间没有任何区别。他们都完成了完全相同的事情。两者都在导出具有两个属性的对象,每个属性的值都是一个函数。所以,我想这完全是一个关于VSCode中蓝色图标的问题。从Javascript的角度来看,两者的工作原理相同,但是在VSCode中,在第一个示例中,它用蓝色图标将它们标记为(属性),在第二个示例中,用紫色图标将它们标记为(方法)。当您从同一个文件中调用函数时,它们的标签为紫色(function),因此似乎应该有一种方法使导出的函数看起来相同,以区分导出的变量和函数。您的第一个示例确实避免了在导入时对函数进行结构分解时丢失此
上下文,并保持正确的智能感知,所以我会接受这个答案。仍然令人恼火的是,仅在模块范围内定义函数,然后导出它们,VSCode无法确定它们是函数,而不仅仅是module.exports对象的属性。我想我会在VSCode的Github上开一张票。