【问题标题】:Updating nested properties from an object with bracket notation in Typescript在 Typescript 中使用括号符号更新对象的嵌套属性
【发布时间】:2021-05-20 00:09:08
【问题描述】:

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

interface Iobj {
  a: { a2:string };
  b: string;
}

const obj: Iobj = {
  a:{
    a2: "hello"
  }
  b: "world"
};

我有一个字符串可以识别 obj 中的属性:

const prop = "a.a2"
// or
const prop = "b"

我正在尝试使用括号符号更新obj,但这些语句给了我错误Type 'string' is not assignable to type 'never'

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

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

【问题讨论】:

  • obj["a.a2"] 即使在原版 JS 中也不起作用;你必须使用lodash.get之类的东西。
  • 有效的道具(例如"b")工作正常typescriptlang.org/play?#code/…

标签: json typescript


【解决方案1】:

问题在于,对于 obj['a.a2'],Javascript 期望 obj 的定义如下:

obj = {
  "a.a2": "hello"
}

但是,在您的情况下,a2a 的子级,因此首先您需要访问a,然后访问a2,这就是为什么在您的情况下obj['a']['a2'] 可以代替。但是,如果您仍然坚持使用a.a2,那么您可以使用能够理解该密钥的 Lodash 库。

https://lodash.com/docs/4.17.15#set

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2016-10-31
    • 2012-01-04
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多