字符串不被接受为 keyof 对象?

时间:2021-05-10 16:53:25

标签: typescript

我正在尝试编写一个返回字符串中键的函数,但出现错误:

<块引用>

类型 '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;
}

我们可以在操场上看到这个 - https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgMpwG4QCYFk6RTBwA2AaqQK4oDeAUMsjCQQMID2AzmAArQCqIYGABcyEJQC2AI2gBuBuKmDhnMRJny6AXzp0YlEAjDB2IZAHMIYAHJxJEABRgAngAcI6qbKgBKMQDWEC7sMGiYOPiExORUtIok1uL2EAqMwGHO7igAvHnIAAy+iowgKcg5yADkGipgnFVpyBAknBAlyQ4V1cxsXLwCQmBVeoxQ1pRQ5mUOCtpAA

有人知道如何让这个通过吗?

1 个答案:

答案 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;
}
相关问题