typscript如何使用for cicle修改对象



你好,我想用下一个结构更新一个对象:

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

你想换哪个物业?

最新更新