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

为何索引对象无法赋值?TypeScript `never`类型报错解析

关于TypeScript报错Type 'any' is not assignable to type 'never'.(2322)的解释

问题场景

以下代码的最后一行出现上述报错,核心疑问是never类型的来源:

type TypeA = {
  a: string;
  b: number;
}
const data = undefined as unknown as TypeA;

// 此处value的类型为string | number,无问题
const value = data['a' as keyof TypeA];

// 此行报错:Type 'any' is not assignable to type 'never'.(2322)
data['a' as keyof TypeA] = undefined as any;

报错原因解析

这个never类型来自TypeScript对联合索引赋值的严格类型检查规则:

  • 当你使用keyof TypeA(即'a' | 'b'这个联合类型)作为索引去赋值时,TypeScript要求你赋的值必须能同时满足所有索引对应的属性类型。
  • TypeA中'a'对应string类型,'b'对应number类型,这两个类型的交集是never(没有任何值能同时既是string又是number)。
  • 因此TypeScript推断出这个索引赋值的目标类型是never,而你赋值的any类型无法匹配never,就触发了报错。

而取值时不会有这个问题:取值时联合索引对应的是属性类型的联合(string | number),只要值属于其中一种类型即可,和赋值的规则完全不同。

解决方法

如果需要完成这类赋值,可以通过两种方式规避:

  • 直接指定具体的键,避免使用联合索引:
    data['a'] = undefined as any;
    
  • 通过类型断言跳过TypeScript的严格检查(仅在你明确知道操作安全时使用):
    (data as any)['a' as keyof TypeA] = undefined as any;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:48:15