TypeScript中如何正确输出响应数据的internalCompanyCode与timestamp?
解决TypeScript中数组类型数据的属性访问错误
错误原因
你定义的json是数组类型,数组在TypeScript中仅支持数字类型索引(如json[0])访问元素,直接用字符串键(比如json['internalCompanyCode'])访问会触发类型错误——因为数组的索引不允许是字符串类型。
正确的字段访问方式
1. 快速直接访问
先通过数字索引获取数组中的对象元素,再逐层访问目标字段:
const json = [ { "internalCompanyCode": "007", "moreInfo": [ { "dimensions": { "height": 27, "width": 31, "length": 61 }, "currenStatus": { "arrived": { "timestamp": "10:00:12" } } } ] } ] // 获取internalCompanyCode console.log(json[0].internalCompanyCode); // 输出 "007" // 获取timestamp console.log(json[0].moreInfo[0].currenStatus.arrived.timestamp); // 输出 "10:00:12" // 也可使用方括号语法(与点语法等价) console.log(json[0]['internalCompanyCode']); console.log(json[0]['moreInfo'][0]['currenStatus']['arrived']['timestamp']);
2. 类型化处理(TypeScript最佳实践)
为避免any类型提示,同时获得类型校验与代码提示,建议给数据定义对应接口:
// 定义数据结构的接口 interface Dimensions { height: number; width: number; length: number; } interface ArrivedStatus { timestamp: string; } interface CurrentStatus { arrived: ArrivedStatus; } interface MoreInfoItem { dimensions: Dimensions; currenStatus: CurrentStatus; } interface CompanyData { internalCompanyCode: string; moreInfo: MoreInfoItem[]; } // 给json指定类型 const json: CompanyData[] = [ { "internalCompanyCode": "007", "moreInfo": [ { "dimensions": { "height": 27, "width": 31, "length": 61 }, "currenStatus": { "arrived": { "timestamp": "10:00:12" } } } ] } ] // 此时访问字段会有类型提示,且不会触发any类型错误 console.log(json[0].internalCompanyCode); console.log(json[0].moreInfo[0].currenStatus.arrived.timestamp);
补充说明
如果你的json是通过JSON.stringify得到的字符串,需要先解析为对象数组才能访问字段:
// 假设result是原始响应数据 const json: CompanyData[] = JSON.parse(JSON.stringify(result));
内容的提问来源于stack exchange,提问作者Pyyyyt
相关产品推荐
相关产品推荐

