如果类成员是从某些选项创建的,那么如何声明它们?
class cls {
constructor(options) {
Object.assign(this, {
arr: [],
}, options);
this.arr[0] = 1; // <- IDE thinks that arr is an unresolved variable
}
}
解决方法:
为了使未明确定义的类属性被IDE(Jetbrains PhpStorm / WebStorm)识别,可以使用JSDoc指定成员:
class cls {
/**
@name cls#arr
@type Array
*/
constructor(options) {...}
}
由于使用Object.assign进行属性赋值不会提供额外的好处,因此更自然的方法是在此明确定义属性(如其他答案所述).
在ES6中:
class cls {
constructor(options) {
this.arr = [];
Object.assign(this, options);
this.arr[0] = 1;
}
}
在带有class field proposal的ES.next中,需要在Babel中预设第3阶段(或更低):
class cls {
arr = [];
constructor(options) {
Object.assign(this, options);
this.arr[0] = 1;
}
}
在构造函数体之前评估类字段,ES.next选项是ES6选项的语法糖.这两个选项是相同的,并由IDE识别.
原文地址:https://codeday.me/bug/20190724/1521573.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。