VS Code为何将字符串识别为undefined?如何修正JSDoc?
解决VS Code IntelliSense识别Foo类属性为undefined的问题
问题出在你没有给Foo类的实例属性添加JSDoc类型标注,VS Code的IntelliSense无法推断出parent(Foo类实例)的value属性类型,因此误判为undefined。
修复方案:给类实例属性添加JSDoc类型标注
直接在类内部为parent和value属性标注类型,让IntelliSense明确知道Foo实例的属性类型:
可空parent版本:
class Foo { /** @type {Foo?} */ parent; /** @type {string} */ value; /** * @param {Foo?} parent * @param {string} value */ constructor(parent, value) { this.parent = parent; this.value = value; if(parent) { let value = parent.value; // 现在IntelliSense会识别为string类型 console.log(value); } } }
非空parent版本:
class Foo { /** @type {Foo} */ parent; /** @type {string} */ value; /** * @param {Foo} parent * @param {string} value */ constructor(parent, value) { this.parent = parent; this.value = value; let parentValue = parent.value; // 现在IntelliSense会识别为string类型 } }
原理说明
你之前仅给构造函数的参数添加了JSDoc标注,这只能定义参数的类型,无法告知IntelliSense Foo类的实例包含哪些属性及其对应类型。通过在类内部为实例属性添加@type标注,IntelliSense就能准确识别parent.value的类型为字符串,不会再误判为undefined。
内容的提问来源于stack exchange,提问作者Dartnix
相关产品推荐
相关产品推荐

