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