我正在尝试编写一个返回字符串中键的函数,但出现错误:
<块引用>类型 'string' 不可分配给类型 'keyof SavedMaterialValue'。(2322)
相关代码和演示为:
interface SavedMaterialValue {
flatCostPerUnit: number;
numUnits: number;
}
function getName(type: number): keyof SavedMaterialValue {
let name;
if (type === 0)
name = 'numUnits';
else
name = 'flatCostPerUnit'
return name;
}
有人知道如何让这个通过吗?
答案 0 :(得分:1)
变量的类型通常应该在声明变量的地方指明。改为输入 keyof SavedMaterialValue
:
function getName(type: number): keyof SavedMaterialValue {
let name: keyof SavedMaterialValue;
if (type === 0)
name = 'numUnits';
else
name = 'flatCostPerUnit'
return name;
}
但条件运算符在这里会更容易:
function getName(type: number): keyof SavedMaterialValue {
return type === 0 ? 'numUnits' : 'flatCostPerUnit';
}
另一种方法是在分配字符串时使用 as const
,这样它们就不会被扩展为 string
:
function getName(type: number): keyof SavedMaterialValue {
let name;
if (type === 0)
name = 'numUnits' as const;
else
name = 'flatCostPerUnit' as const
return name;
}