VS2017中如何为动态添加属性的对象O保留原有IntelliSense并新增提示?
解决VS2017中动态添加对象属性后IntelliSense不识别的问题
嘿,我来帮你搞定这个IntelliSense的小麻烦!你不想破坏原有自动生成的提示,又要给动态加的属性补全支持,用JSDoc的类型合并就能完美解决,不用手动写那些嵌套对象的注释,步骤很简单:
具体操作步骤
- 首先,用
@typedef结合typeof自动捕获原有对象O的完整类型(包括所有嵌套属性),完全不用你手动敲:// 自动捕获原有对象的所有属性和嵌套结构,生成基础类型 /** @typedef {typeof O} OriginalOType */ - 接着,定义一个扩展后的类型,把你要新增的
SampleProperty加进去,用交叉类型&合并原有类型:// 扩展基础类型,添加新属性的类型定义 /** @typedef {OriginalOType & { SampleProperty: string }} ExtendedOType */ - 最后,给对象
O标注上这个扩展后的类型,之后不管是原有属性还是新增的SampleProperty,IntelliSense都能识别了:/** @type {ExtendedOType} */ let O = { PropertyA: "Testing", PropertyB: {Testing: "A"} }; // 现在给O添加属性时,IntelliSense会自动提示SampleProperty O.SampleProperty = "testing";
为什么这招好用?
typeof O会让VS自动解析出原有对象的所有结构,包括嵌套的PropertyB里的属性,完全省去了你手动写JSDoc描述复杂嵌套的麻烦。交叉类型&则把原有类型和新属性的定义合并在一起,这样IntelliSense就能同时识别原有属性和你动态添加的属性,完美保留了原来的自动提示功能。
内容的提问来源于stack exchange,提问作者Ali Hasan
相关产品推荐
相关产品推荐

