TypeScript创建适配嵌套JSON的接口:解决类型不兼容问题
解决TypeScript接口与嵌套JSON不兼容的问题
咱们先拆解下你遇到的问题根源:你的JSON数据和TypeScript接口完全对不上,主要有这几个核心矛盾:
- JSON里的
servicesAndHeads是数组类型,但你原接口里定义成了单个ServicesAndHead对象 - 内层嵌套的数组属性名是
majorHead,但你接口里写的是servicesAndHeads,而且字段名也不匹配(比如JSON里是majorHeadNumber,接口里是HeadNumber)
直接调整接口结构就能完美适配你的JSON,来看修正后的完整代码:
// 最内层的majorHead对象接口,完全匹配JSON里的字段 interface MajorHead { majorHeadNumber?: string; majorHeadDescription?: string; } // 对应servicesAndHeads数组里的每一项 interface ServicesAndHead { majorService?: string; subMajorService?: string; majorHead?: MajorHead[]; // 这里改成和JSON一致的属性名 } // 顶层接口,servicesAndHeads定义为数组类型 export interface MyTableItem { demandNo?: string; demandName?: string; servicesAndHeads?: ServicesAndHead[]; // 这里改成数组,和JSON结构匹配 } // 现在再赋值就不会报错啦 const dataItem: MyTableItem = { demandNo: 'Demand Number 2', demandName: 'Animal Husbandary, Livestock, Fisheries and Veterinary Services', servicesAndHeads: [ { majorService: 'C-Economic Service', subMajorService: '(a) Agriculture and Allied Activities', majorHead: [ { majorHeadNumber: '3098', majorHeadDescription: 'Animal Husbandry' }, { majorHeadNumber: '3999', majorHeadDescription: 'Diary Development' }, { majorHeadNumber: '4902', majorHeadDescription: 'Fisheries' } ] }, { majorService: 'C- Capital Account of Economic Services', subMajorService: '(a) Capital Account of Agriculture and Allied Activities', majorHead: [ { majorHeadNumber: '0012', majorHeadDescription: 'Capital Outlay on Animal ' }, { majorHeadNumber: '3245', majorHeadDescription: 'Capital Outlay on Fisheries' } ] } ] };
关键修改说明:
- 字段名完全对齐:把原来的
Head接口改名为MajorHead,属性名和JSON里的majorHeadNumber、majorHeadDescription一一对应 - 数组类型修正:
ServicesAndHead里的嵌套数组属性名改为majorHead,类型是MajorHead[];同时MyTableItem里的servicesAndHeads定义为ServicesAndHead[],因为你的JSON里这部分是数组 - 去掉不必要的索引签名:你之前尝试的
{ [key: string]: ... }写法完全没必要,因为你的JSON结构是固定的,用明确的接口定义更清晰也更安全
内容的提问来源于stack exchange,提问作者Iswar
相关产品推荐
相关产品推荐

