如何在TypeScript上迭代对象,改变其对应数字的字符串值?

jv4diomz  于 2022-12-24  发布在  TypeScript
关注(0)|答案(2)|浏览(152)

我有一个来自第三方API的类型,它有很多属性(50+),它们把所有的值都当作字符串。偶数和布尔值变成了字符串(分别是“5”和“false”),我想修复这个可怕的事情。
因此,我创建了一个类似这样的类型来接收来自API的响应,并在修复后保存

interface Person {
  age: string | number,
  name: string,
  hasChildren: string | boolean,
  ...
}

我想把这个

const responseFromApi: Person = {
  age: "20",
  name: "John",
  numberOfChildren: "true"
  ...
}

const afterTreatment: Person = {
  age: 21,
  name: "John",
  numberOfChildren: true
  ...
}

这是一个例子...我的对象,再次,比这大得多,在这种情况下有很多 prop ,所以单独对待他们不是我正在寻找的解决方案。
我的意图是迭代对象,并将可以在type之后更改的内容更改为数字或布尔值。

6ioyuze2

6ioyuze21#

你可以对数组进行for循环,检查element.age是否是字符串,如果是,解析age并重新设置它。一个更好的解决方案可能是Map列表,并做上面同样的事情,这样它就创建了一个新的数组,然后你可以覆盖它或做你需要做的事情。
想法:

const changed = persons.map((p: Person) => {
  if (typeof p.age === "string") {
    return {
      ...p,
      age:parseInt(p.age)
    }
  }
  return p
});
zpqajqem

zpqajqem2#

只要变量约定与person1、person2、person3等一致,这就可以工作,而且您还需要知道添加的人员总数,以便forloop工作

interface Person {
    age: string | number,
    name: string
}
const person1: Person = {
  age: 20,
  name: "Jonh",
}
const person2: Person = {
  age: "21",
  name: "Marie",
}
const lengthOfPersons: number = 2;
const newArray = [];
for(let i = 0; i < lengthOfPersons; i++)
{
 const n = i + 1;
 const row = eval('person'+n);
 newArray.push({...row, age: +row.age})
}
console.log(newArray);

相关问题