Javascript ES6代码完成(Intellisense),在VSCode中合成

Javascript ES6代码完成(Intellisense),在VSCode中合成,javascript,ecmascript-6,visual-studio-code,intellisense,composition,Javascript,Ecmascript 6,Visual Studio Code,Intellisense,Composition,当使用以下语法在es6中嵌套类时,我试图让代码完成工作:classdog extensedsfoodmixin(Animal)。第一个实现工作得很好,让我能够自动完成FoodMixin和Animal。但是,如果我将其嵌套得更深,或者应用第二个mixin,则自动完成将停止。例如:类Dog扩展了OtherMixin(FoodMixin(Animal))将丢失FoodMixin类的代码完成 有没有办法让intellisense同时为OtherMixin和FoodMixin工作 简单测试代码: cons

当使用以下语法在es6中嵌套类时,我试图让代码完成工作:
classdog extensedsfoodmixin(Animal)
。第一个实现工作得很好,让我能够自动完成FoodMixin和Animal。但是,如果我将其嵌套得更深,或者应用第二个mixin,则自动完成将停止。例如:
类Dog扩展了OtherMixin(FoodMixin(Animal))
将丢失FoodMixin类的代码完成

有没有办法让intellisense同时为OtherMixin和FoodMixin工作

简单测试代码:

const FoodMixin = superclass => class extends superclass {
    eat() {
        console.log("Eating");
    }
};

const OtherMixin = superclass => class extends superclass {
    test() {
        console.log("Hello");
    }
};

class Animal {
}

class Dog extends OtherMixin(FoodMixin(Animal)){
}

const dog = new Dog();
dog.test(); //INTELLISENSE WORKS
dog.eat(); //INTELLISENSE DOES NOT WORK

VS代码的JavaScript IntelliSense将无法理解类似于该示例的非常动态的代码。您链接到的教程提供了这段代码,它太聪明了,不利于自己(或任何人)

但是,您可以通过使用JSDoc为示例中使用的类型和接口添加显式类型注释,来解决代码的限制:

/**
*@typedef{{eat():void}Eater
*/
/**
*@typedef{{test():void}}Tester
*/
/**
*@type{Dog&Eater&Tester}
*/
const dog=新狗();
狗。


&
不是标准的JS文档类型语法,而是一个from类型脚本。(我在这里使用它是因为它模仿了构图)

这不是对你问题的直接回答,但不这样使用继承可能有些道理。这样的继承链通常会导致难以测试和维护的代码。如果你有兴趣进一步学习的话,有很多关于组合与继承的文献。我建议你永远不要像上面的例子那样编写代码。您试图以vscode和人类难以理解的方式混合组合和继承@Peter明白了,这意味着我遵循的以下教程建议了一些不好的做法:?如果是这样,我将如何使用支持intellisense的ES6遵循合成模式?我似乎找不到好的教程。。