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

TS2322错误求助:string|number|boolean|Dayjs无法赋值给never类型

错误解释与修复

错误原因

这个TS2322错误的核心是类型安全校验不通过:

  • 你定义的newValue是string | number | boolean | Dayjs的联合类型,但kurs对象里的每个属性都有自己明确的专属类型(比如某属性是string,另一属性是number)。
  • TypeScript无法确保你传入的newValue类型和what指定的属性类型完全匹配,为了避免不安全的赋值操作,它把tmpKurs[what]的类型推断成了never——因为没有任何类型能同时兼容kurs所有属性的类型和newValue的联合类型,自然无法完成赋值。

修复方案

用泛型绑定what和newValue的类型关联,让TypeScript明确每个属性对应的正确值类型:

function changeKurs<K extends keyof typeof kurs>(what: K, newValue: typeof kurs[K]){
    const tmpKurs = cloneDeep( kurs );
    if (Object.prototype.hasOwnProperty.call(tmpKurs, what)) {
        tmpKurs[what] = newValue;
        setkurs(tmpKurs);
    }else {
        console.error(`Property '${what}' does not exist in kurs`);
    }
}

修复说明

  • 泛型K被约束为keyof typeof kurs,也就是kurs的所有属性名。
  • newValue的类型指定为typeof kurs[K],即K对应属性的具体类型。这样当你传入某个属性名时,TypeScript会自动校验newValue的类型是否和该属性类型一致,既保证了类型安全,也解决了赋值错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:22:02