动态向JSON特定子节点添加子项报错:TypeError: push不是函数
解决
push is not a function错误:给JSON对象添加子节点的正确方式 嘿,我一眼就看出问题所在了——你把对象和数组的操作搞混啦!
错误根源
你代码里的this.myObj.properties是一个JavaScript对象(用{}定义的键值对结构),而push()是数组([])专属的方法。对象根本没有push这个方法,所以调用它肯定会报错ERROR TypeError: this.yourJsonSchema.properties.push is not a function。
正确的添加方式
要给properties这个对象添加新的子节点,直接给它赋值新的属性就行,有两种常用写法:
1. 固定字段名的情况
如果你确定要加的字段是email,直接用点语法赋值:
addField(){ // 直接给properties对象添加email属性 this.myObj.properties.email = { 'type': 'string' }; }
2. 动态字段名的情况
如果字段名是变量(比如从用户输入获取),用方括号语法:
addField(){ const newFieldName = 'email'; // 这里可以是动态生成的字段名 this.myObj.properties[newFieldName] = { 'type': 'string' }; }
额外的类型修正提醒
你一开始把myObj声明为any[](数组类型),但后面却赋值成了一个对象,这会导致TypeScript的类型不匹配警告。最好把类型声明改成对象类型:
// 改成任意对象类型,或者更严谨地定义接口 myObj: any = {}; // (可选)更推荐的方式:定义接口来约束结构 interface SchemaProperty { type: string; } interface MySchema { type: string; properties: Record<string, SchemaProperty>; } myObj: MySchema = { "type": "object", "properties": { "first_name": { "type": "string" }, "last_name": { "type": "string" }, } };
这样修改后,你就能顺利给properties添加新的子节点啦!
内容的提问来源于stack exchange,提问作者Mohammad Fareed
相关产品推荐
相关产品推荐

