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
相关产品推荐
相关产品推荐

