当使用以下语法在 es6 中嵌套类时,我试图让代码完成工作:class Dog extends FoodMixin(Animal)
。第一个实现工作正常,让我自动完成 FoodMixin 和 Animal。但是,如果我将它嵌套得更深,或者应用第二个 mixin,自动完成就会停止。例如:class Dog extends OtherMixin(FoodMixin(Animal))
将丢失 FoodMixin 类的代码完成。
有没有办法让智能感知同时适用于 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 Code 的 JavaScript IntelliSense 将无法理解像该示例那样非常动态的代码。您链接到的教程提供的这段代码对于它自己(或实际上任何人)的好处来说太聪明了。
但是,您可以通过使用 JSDoc 为示例中使用的类型和接口(interface)添加显式类型注释来解决 VS Code 的限制:
/**
* @typedef {{ eat(): void }} Eater
*/
/**
* @typedef {{ test(): void }} Tester
*/
/**
* @type {Dog & Eater & Tester}
*/
const dog = new Dog();
dog.
&
不是标准的 JS Doc 类型语法,而是 intersection type来自 typescript 。 (我在这里使用它是因为它模仿了构图)
关于javascript - ES6 代码完成(Intellisense)与 VSCode 中的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57611901/