如果类成员是从某些选项创建的,那么如何声明它们?
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识别.