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

TypeScript中string无法赋值给keyof对象类型报错如何解决?

报错原因

Type 'string' is not assignable to type 'keyof SavedMaterialValue'.(2322)
你声明name变量时没有指定类型,TypeScript 会默认将其推导为更宽泛的string类型,而函数声明的返回值是更窄的keyof SavedMaterialValue联合类型,二者类型不匹配因此触发报错。

解决方法

方法1:给中间变量显式指定类型

直接在声明name时标注类型为keyof SavedMaterialValue即可,修改后代码如下:

interface SavedMaterialValue {
  flatCostPerUnit: number;
  numUnits: number;
}

function getName(type: number): keyof SavedMaterialValue {
  // 显式指定name的类型
  let name: keyof SavedMaterialValue;
  if (type === 0)
    name = 'numUnits';
  else
    name = 'flatCostPerUnit'

  return name;
}

方法2:直接返回字面量,省略中间变量

如果不需要保留中间变量,直接在分支中返回对应键名字面量,TypeScript 可以自动推导返回值的类型匹配要求,不需要额外标注:

function getName(type: number): keyof SavedMaterialValue {
  if (type === 0)
    return 'numUnits';
  else
    return 'flatCostPerUnit'
}

方法3:使用类型断言(优先级低于前两种)

如果不想修改变量声明,也可以在返回时用as关键字断言类型,仅推荐你确定返回值一定符合keyof SavedMaterialValue范围时使用:

function getName(type: number): keyof SavedMaterialValue {
  let name;
  if (type === 0)
    name = 'numUnits';
  else
    name = 'flatCostPerUnit'

  return name as keyof SavedMaterialValue;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 08:24:11