你好,我想用下一个结构更新一个对象:
var searchBody: searchObject = {
type: {
name: {
name: false,
last_name: false,
full_name: false,
email: false,
booking_id: false,
phone_number: false,
},
},
constrain: {
name: {
contain: false,
equal_to: false,
starts_by: false,
ends_by: false,
},
},
item: '',
};
有一个for cicle和一个像这样的条件:
var n:number =0;
searchBy: string = '';
for (let key in searchBody.type.name) {
//Object.prototype.hasOwnProperty.call(searchBody.constrain.name, key)
console.log(key)
if (this.searchBy==n.toString()) {
searchBody.constrain.name.key = true
}
n++
}
但是Typescript将条件内的行标记为语法错误
在初始化我的对象之前,我使用接口在我的主对象中创建每个内部对象,比如下一个代码:
interface searchByObject {
name: boolean;
last_name: boolean;
full_name: boolean;
email: boolean;
booking_id: boolean;
phone_number: boolean;
}
interface searchFilterObject{
contain: boolean,
equal_to: boolean,
starts_by: boolean,
ends_by: boolean,
}
interface searchBy {
name: searchByObject;
}
interface searchFilter {
name: searchFilterObject;
}
interface searchObject {
type: searchBy;
constrain: searchFilter;
item: string;
}
我必须使用什么逻辑来正确创建我的对象并更新其值,谢谢你的帮助c:
您没有名为key
:的属性
searchBody.constrain.name.key = true
如果要访问名称为key
的值的属性,则应执行以下操作:
searchBody.constrain.name[key] = true
以下是有关属性访问器和括号符号的更多信息
编辑
您需要做的是明确地告诉typescript,key
实际上是存在于searchBody.constrain.name
对象中的有效键。
您可以创建一个通用函数,该函数将使用类型谓词告诉typescript:
const objectHas = <T>(object: T, key: string | number | symbol): key is keyof T => key in object;
我们基本上创建了一个函数,可以获取任何对象和一个键,如果该键存在于对象中,它将告诉typescript该值确实是对象中的有效键。
那么你所要做的就是把这个添加到你的条件中:
if (this.searchBy==n.toString() && objectHas(searchBody.constrain.name, key)) {
searchBody.constrain.name[key] = true
}
searchBody.constrain.name.key = true
你想换哪个物业?