ES6 代码完成(智能感知)与 VSCode 中的组合

Jak*_*ron 5 javascript intellisense composition ecmascript-6 visual-studio-code

我尝试使用下面的语法在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
Run Code Online (Sandbox Code Playgroud)

Mat*_*ner 2

VS Code 的 JavaScript IntelliSense 将无法理解像该示例那样的非常动态的代码。您链接到的提供此代码的教程对于它自己(或实际上任何人)的好处来说太聪明了。

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

/**
 * @typedef {{ eat(): void }} Eater
 */

/**
 * @typedef {{ test(): void }} Tester
 */

/**
 * @type {Dog & Eater & Tester}
 */
const dog = new Dog();
dog.
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

&不是标准的 JS Doc 类型语法,而是TypeScript 的交集类型。(我在这里使用它是因为它模仿构图)