Typescript 阵列上的循环<;接口键>;

Typescript 阵列上的循环<;接口键>;,typescript,Typescript,我有一个名为Item的对象,我定义了一个包含其字段的接口,以及一个可以更改和定义的字段数组。 当用户想要更新项目时,他会发送一个包含更新项目的POST请求,我会遍历数组并根据用户的数据更新字段。 问题是Typescript抛出了一个错误: 类型“string | number”不可分配给类型“never”。 类型“string”不可分配给类型“never”。ts(2322) 如果能在这个问题上得到任何帮助,我将不胜感激 interface Item { id?: number;

我有一个名为Item的对象,我定义了一个包含其字段的接口,以及一个可以更改和定义的字段数组。 当用户想要更新项目时,他会发送一个包含更新项目的POST请求,我会遍历数组并根据用户的数据更新字段。 问题是Typescript抛出了一个错误: 类型“string | number”不可分配给类型“never”。 类型“string”不可分配给类型“never”。ts(2322)

如果能在这个问题上得到任何帮助,我将不胜感激

interface Item {
    id?: number;
    title?: string;
    price?: number;
}

const requiredItemFields: Array<keyof Item> = [
    "title",
    "price",
]

app.post('/update-item', (req, res) => {
    const existItem: Item = req.body.item;
    const newItem: Item = {};
    for (let filed of requiredItemFields) {
        if (existItem.hasOwnProperty(filed)) {
            newItem[filed] = existItem[filed]; << ERROR
        }
    }
})
接口项{
id?:编号;
标题?:字符串;
价格?:数字;
}
常量requiredItemFields:数组=[
“头衔”,
“价格”,
]
app.post(“/更新项”,(请求、回复)=>{
const existItem:Item=req.body.Item;
const newItem:Item={};
for(将requiredItemFields归档){
如果(存在hasOwnProperty(已存档)){

newItem[field]=existItem[field];问题是typescript没有你想象的那么聪明

当您这样做时:

newItem[filed] = existItem[filed];
typescript不假定
newItem[field]
existItem[field]
的类型相同

对它来说,
existItem[field]
可以是项目键后面的任何类型

作为对我所说内容的验证,我们可以看到以下内容正在发挥作用:

newItem[filed as 'id'] = existItem[filed as 'id'];

你有什么解决办法

强迫typescript接受假装的“我知道我在做什么,这两个值是同一类型的”

newItem[filed] = existItem[filed] as any;
// @ts-ignore
newItem[filed] = existItem[filed];