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

如何修复Type 'string' is not assignable to type 'never'报错

报错原因

  1. 首先明确never类型的由来:TypeScript 中使用联合类型的键索引对象时,赋值操作的目标类型会被推导为所有可能属性类型的交集。你定义的FlagsObject类型的属性分别是字面量类型'ONE'和'TWO',这两个互斥的字面量不存在公共交集,因此推导结果就是never类型。
  2. 你的操作问题在于:循环时key是联合类型'ONE'|'TWO',TypeScript 不会自动关联每一轮循环中key和对应属性的类型匹配关系,无法验证赋值的安全性,因此抛出Type 'string' is not assignable to type 'never'错误。同时你直接用{} as FlagsObject初始化空对象也属于类型断言跳过了初始值的类型校验,不过这不是报错的直接原因。

解决方案

方案1:使用类型断言绕开校验

确定逻辑正确的前提下,赋值时添加类型断言即可:

for (const key of keys) {
  result[key] = key as FlagsObject[FlagsKeys];
}

更简洁的写法是直接用Object.fromEntries生成目标对象,避免循环赋值的类型问题:

const result = Object.fromEntries(
  Object.keys(Flags).map(key => [key, key])
) as FlagsObject;

方案2:用泛型函数封装实现类型安全

如果不想使用类型断言,可以通过泛型函数让TS自动匹配类型:

function assignKey<T extends object, K extends keyof T>(obj: T, key: K, value: T[K]) {
  obj[key] = value;
}

for (const key of keys) {
  assignKey(result, key, key); // TypeScript 会自动校验类型匹配,无报错
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 17:24:09