首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Array<keyof interface>上的循环

Array<keyof interface>上的循环
EN

Stack Overflow用户
提问于 2020-07-17 09:17:43
回答 1查看 171关注 0票数 1

我有一个名为Item的对象,我定义了一个包含其字段的接口,以及一个可以更改和定义的字段数组。当用户想更新项目时,他会发送带有更新项的POST请求,然后我遍历数组并根据用户的数据更新字段。问题是,类型记录会引发一个错误:输入'string‘不能分配到输入’从不‘。输入'string‘不能指定键入’never‘. to (2322)

我希望在这个问题上提供任何帮助。

代码语言:javascript
复制
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
        }
    }
})

打字稿游乐场

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-17 09:33:41

打字稿不像你想的那么聪明。

当你这样做时:

代码语言:javascript
复制
newItem[filed] = existItem[filed];

类型记录并不假定newItem[filed]existItem[filed]的类型相同。

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

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

代码语言:javascript
复制
newItem[filed as 'id'] = existItem[filed as 'id'];

你有什么解决办法?

强迫打字稿接受装模作样的“我知道我在做什么,这两个价值观是同一类型的”。

代码语言:javascript
复制
newItem[filed] = existItem[filed] as any;

代码语言:javascript
复制
// @ts-ignore
newItem[filed] = existItem[filed];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62950951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档