我有一个名为Item的对象,我定义了一个包含其字段的接口,以及一个可以更改和定义的字段数组。当用户想更新项目时,他会发送带有更新项的POST请求,然后我遍历数组并根据用户的数据更新字段。问题是,类型记录会引发一个错误:输入'string‘不能分配到输入’从不‘。输入'string‘不能指定键入’never‘. to (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
}
}
})发布于 2020-07-17 09:33:41
打字稿不像你想的那么聪明。
当你这样做时:
newItem[filed] = existItem[filed];类型记录并不假定newItem[filed]与existItem[filed]的类型相同。
对它来说,existItem[filed]可以是项键后面的任何类型。
为了验证我所说的内容,我们可以看到,以下内容正在发挥作用:
newItem[filed as 'id'] = existItem[filed as 'id'];你有什么解决办法?
强迫打字稿接受装模作样的“我知道我在做什么,这两个价值观是同一类型的”。
newItem[filed] = existItem[filed] as any;或
// @ts-ignore
newItem[filed] = existItem[filed];https://stackoverflow.com/questions/62950951
复制相似问题