Json 从Typescript中使用括号表示法的对象更新嵌套属性

Json 从Typescript中使用括号表示法的对象更新嵌套属性,json,typescript,Json,Typescript,假设我有一个具有嵌套属性的接口和对象: 接口Iobj{ a:{a2:string}; b:弦; } 常量对象:Iobj={ a:{ a2:“你好” } b:“世界” }; 我有一个字符串,用于标识obj中的属性: const prop=“a.a2” //或 const prop=“b” 我试图用括号表示法更新obj,但是这些语句给了我一个错误类型“string”不能分配给类型“never” obj[prop] = "newString"; obj[prop as keyo

假设我有一个具有嵌套属性的接口和对象:

接口Iobj{
a:{a2:string};
b:弦;
}
常量对象:Iobj={
a:{
a2:“你好”
}
b:“世界”
};
我有一个字符串,用于标识obj中的属性:

const prop=“a.a2”
//或
const prop=“b”
我试图用括号表示法更新
obj
,但是这些语句给了我一个错误
类型“string”不能分配给类型“never”

obj[prop] = "newString";
obj[prop as keyof Iobj] = "newString";

似乎未将对象[prop]识别为有效。我在这里做错了什么?

问题是,使用
obj['a.a2']
Javascript希望
obj
的定义如下:

obj = {
  "a.a2": "hello"
}
然而,在您的案例中,
a2
a
的子对象,因此首先需要访问
a
,然后访问
a2
,这就是为什么在您的案例中,
obj['a']['a2']
起作用的原因。但是,如果您仍然坚持使用
a.a2
,则可以使用理解该键的Lodash库

obj[“a.a2”]
即使在香草JS中也不起作用;您必须使用类似于
lodash.get
。有效的道具(例如
“b”
)工作正常