有没有一种简单的方法可以使用 TypeScript 更改嵌套 json 数据中的一个值?

Posted

技术标签:

【中文标题】有没有一种简单的方法可以使用 TypeScript 更改嵌套 json 数据中的一个值?【英文标题】:Is there an easy way to change one value in a nested json data with TypeScript? 【发布时间】:2021-04-24 15:52:42 【问题描述】:

TypeScript 版本:^3.5.3

对于这个json

const config = 
  id: 1,
  title: "A good day",
  body: "Very detailed stories"
  publishedAt: "2021-01-20 12:21:12"

可以改成新标题,展开语法为 as

const newConfig = 
  ...config,
  title: "A new day"

最终的newConfig 数据将是


  id: 1,
  title: "A new day",
  body: "Very detailed stories"
  publishedAt: "2021-01-20 12:21:12"


但在这种情况下

const config = 
  id: 1,
  articleConfig: 
    version: "2",
    configs: [
      
        title: "A good day",
        body: "Very detailed stories"
        publishedAt: "2021-01-20 12:21:12"
      
    ]
  

还想更改title 的值。试过了

const newConfig = 
  ...config,
  articleConfig: 
    configs: [
      
        title: "A new day"
      
    ]

它会破坏预定义的 json 架构:

const newConfig: 
    id: number;
    articleConfig: 
        version: string;
        configs: 
            title: string;
            body: string;
            publishedAt: string;
        [];
    ;

那么有没有一种简单的方法可以只覆盖这种 json 中的一项?

【问题讨论】:

记住 json 是 javascript。并且在 javascript 中对象是可变的。无需使用不可变样式复制使事情复杂化。 TypeScript 的版本是^3.5.3。那么你的意思是如何让一个新的数据库成为当前的数据库呢? 我想知道为什么一切都是常量。您可以克隆对象并对其进行变异。 【参考方案1】:
const oldConfig =  /* ... */ ;

const newConfig = 
  ...oldConfig,
  articleConfig: 
    ...oldConfig.articleConfig,
    configs: config.configs.map(config => (
       ...config,
       title: "A new day"
    ))
;

【讨论】:

以上是关于有没有一种简单的方法可以使用 TypeScript 更改嵌套 json 数据中的一个值?的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript - 根据属性值从数组中取出对象

Typescript Angular:如果未定义(未使用),默认将所有类成员设置为 Null

打字稿 + ES6 代理

Typescript 的基本问题 - “[ts] Unexpected token。一种构造,方法......”

如何用 Decorator 装饰你的 Typescript?

简单理解JavaScript,TypeScript和JSX