You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Typescript赋值报错string | number不可分配给never类型ts(2322)如何解决

错误原因

当前函数定义未关联key与val的类型匹配关系:key为IDevice的任意属性键,val为独立的string | number类型,TypeScript 无法保证传入的val类型与key对应的IDevice属性类型一致,因此将两者的匹配类型判定为never,触发赋值报错。

解决方案

推荐方案:添加泛型约束(保留完整类型校验能力)

给函数增加泛型绑定key和对应val的类型,无需添加@ts-ignore即可通过校验:

const updateItem = <K extends keyof IDevice>(key: K, val: IDevice[K], i: number) => {
    const devices = [...formData.devices];
    const device = devices[i];
    device[key] = val;
    devices[i] = device;
    setFormData({ ...formData, devices });
};

该方案下调用函数时,TypeScript会自动校验参数合法性:例如传入key='name'时仅允许val为字符串类型,传入key='width'时仅允许val为数字类型,不会损失类型安全。

临时兼容方案(不推荐,会丢失类型校验)

如果仅需要快速消除报错,可以对val做类型断言:

// @ts-ignore 注释也可以同时移除
device[key] = val as never;

内容的提问来源于stack exchange,提问作者Akash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 07:33:03