TypeScript如何通过对象名和属性名访问对应对象的属性值
解决方案
你的核心问题是用字符串形式的对象名称匹配对应实例,之前的indexOf方法失效是因为你把字符串(objectName)和实例对象放在一起对比,自然找不到匹配项。不想给实例加额外属性的话,最直接高效的方式是用名称-实例映射表:
实现代码
import object1 from '../path/to/object1'; import object2 from '../path/to/object2'; // 建立对象名称到实例的映射 const objectMap = { 'object1': object1, 'object2': object2 }; function getPropertyValue(objectName, propertyName) { // 根据名称获取对应实例 const targetObj = objectMap[objectName]; if (targetObj) { // 检查属性是否存在,避免输出undefined if (propertyName in targetObj) { console.log(targetObj[propertyName]); } else { console.log(`对象 ${objectName} 不存在属性 ${propertyName}`); } } else { console.log(`不存在名为 ${objectName} 的对象`); } }
方案优势
- 无需遍历所有对象,直接通过键值对查找,性能更优(尤其对象数量较多时)
- 不用修改原有类的定义,完全避免添加不必要的
name属性 - 扩展性强:后续新增对象时,仅需在
objectMap中添加一行键值对即可
补充说明
你之前的遍历方案之所以输出undefined,是因为非目标对象没有对应属性。用映射表配合propertyName in targetObj的存在性检查,就能完美避免这种无效输出。
内容的提问来源于stack exchange,提问作者rmoreltandem
相关产品推荐
相关产品推荐

