javascript - ES6 代码完成(Intellisense)与 VSCode 中的组合

标签 javascript ecmascript-6 visual-studio-code intellisense composition

当使用以下语法在 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.

enter image description here

& 不是标准的 JS Doc 类型语法,而是 intersection type来自 typescript 。 (我在这里使用它是因为它模仿了构图)

关于javascript - ES6 代码完成(Intellisense)与 VSCode 中的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57611901/

相关文章:

php - 在Javascript函数下调用php页面

javascript - 使用 JavaScript 显示日期 + 3 个月?

javascript - 将 jQuery 插件转换为 es6 模块

node.js - 调试 SSR node.js 服务器端 VSCode

python - 使用 Visual Studio Code 在 Python 中逐步调试导入的模块

相当于jquery所有子选择器的javascript

javascript - JQuery - 将多个文本输入传递到隐藏字段

javascript - 如何解析模块中命名的 ES6/ES2015 导出列表?

Javascript 使用正则表达式匹配组替换 HTML 标签

ubuntu - 如何设置 Visual Studio Code 以在 Linux 上调试 C 程序?