ts 对象使用循环赋值的方式报错?

image.png

image.png

image.png
如图所示,请问需要怎么写

阅读 2.3k
2 个回答
✓ 已被采纳

参考方法

Object.keys(form).forEach((v) => {
  const value = v as keyof typeof form
  form[value] = data[value]
})

但有时候没必要做得那么极端。像你这代码一看就懂得是在复制属性,可以偷个小懒直接写成

Object.keys(form).forEach((value) => {
  (form as any)[value] = (data as any)[value]
})

毕竟工具用来给人服务的,这种一看就不会出错的代码没必要还被工具束缚。

此外,如果是为了合并对象,还可以直接用

Object.assign(form, data)

请根据自己的需求选择适合的方法。

楼上的方法其实是最简单有效的,非要严格一点,我能想到可以这么写

function getObjectKeys<T extends object>(object: T) {
    return Object.keys(object) as (keyof T)[]
}
type PropKeys = keyof typeof from


const init =(data: typeof from )=>{
    if(data){
        getObjectKeys(from).forEach(<K extends PropKeys>(value: K)=>{
            from[value]=data[value]
        })
    }
}
推荐问题
logo
Microsoft
子站问答
访问
宣传栏