如何在TypeScript中声明JSON对象数组类型的接口属性?
解决TypeScript接口定义问题
你的代码有两个关键问题:
- TypeScript的接口(interface)只负责定义类型结构,不能直接给属性赋值(比如
= []这种写法是不允许的)。 - 用
JSON类型来描述你的嵌套结构太宽泛了,应该明确定义每个层级的类型,这样才能获得TypeScript的类型校验优势。
正确的类型定义方式
先把你的嵌套结构拆分成更细的类型,再组合起来:
// 定义城市类型 interface City { zip_code: string; } // 定义单个地址项里的first_address结构 interface FirstAddress { city: City; } // 定义数组里的每一项 interface AddressItem { first_address: FirstAddress; } // 最终的用户接口 interface IUser { addresses: AddressItem[]; }
如果需要给addresses设置默认空数组,要在实现接口的对象里设置,而不是在接口里:
// 创建符合IUser接口的对象,设置默认空数组 const user: IUser = { addresses: [] }; // 之后可以按照定义的结构添加数据 user.addresses.push({ first_address: { city: { zip_code: "100000" } } });
简化写法(用类型别名)
如果觉得拆分成多个接口太繁琐,也可以用类型别名(type)直接写嵌套结构:
type AddressItem = { first_address: { city: { zip_code: string; }; }; }; interface IUser { addresses: AddressItem[]; } // 使用示例 const user: IUser = { addresses: [] };
这样定义后,TypeScript会严格校验addresses数组里的每个对象结构,避免不符合格式的数据被存入。
内容的提问来源于stack exchange,提问作者best_of_man
相关产品推荐
相关产品推荐

