如果类成员是从某些选项创建的,如何声明它们?
class cls {
constructor(options) {
Object.assign(this, {
arr: [],
}, options);
this.arr[0] = 1; // <- IDE thinks that arr is an unresolved variable
}
}发布于 2018-05-05 15:20:27
为了让IDE (Jetbrains PhpStorm/WebStorm)能够识别未明确定义的类属性,可以使用JSDoc指定一个成员:
class cls {
/**
@name cls#arr
@type Array
*/
constructor(options) {...}
}由于Object.assign的属性分配没有提供额外的好处,所以更自然的方法是在this上显式地定义属性(正如其他答案所提到的)。
在ES6中:
class cls {
constructor(options) {
this.arr = [];
Object.assign(this, options);
this.arr[0] = 1;
}
}在ES.next with 类字段提案中,需要在Babel中预先设置第3阶段(或更低的阶段):
class cls {
arr = [];
constructor(options) {
Object.assign(this, options);
this.arr[0] = 1;
}
}类字段在构造函数体之前进行评估,ES.next选项是ES6选项的语法糖。这两个选项是相同的,并被IDE识别。
发布于 2018-05-05 14:19:49
如果您使用的是Babel,则可以使用类属性:
class cls {
arr = []
constructor(options) {
Object.assign(this, options);
this.arr[0] = 1;
}
}发布于 2018-05-05 14:55:17
只是不要使用Object.assign来创建带有默认值的属性。写
class cls {
constructor(options) {
this.arr = [];
Object.assign(this, options);
this.arr[0] = 1; // should work now
}
}https://stackoverflow.com/questions/50190384
复制相似问题