打字稿不允许动态访问属性

时间:2021-04-07 09:50:55

标签: javascript typescript

当我尝试在打字稿中访问我的对象属性时遇到一些问题:

const total = (type: string) => {
  return {
    status: 'Total',
    test: data?[type].total,
  };
};

total('first')

这是我的数据的样子:

data: {
  first: {
    total: 15
  },
  second: {
    total: 515
  }
}

尝试访问我得到的属性 TS2339: Property 'total' does not exist on type 'string[]'. 为什么我得到这个以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您正在此处寻找 optional chaining operator 并且 data?.[type] 是正确的语法。

如果只是尝试使用 object[property] 读取对象字段,TS 也会抛出错误。它正确地假设不可能仅使用任何 string 读取对象属性,它需要更多特定类型。看看下面的代码。

interface Data {
  first: {
    total: number
  },
  second: {
    total: number
  }
}

const data: Data = {
  first: {
    total: 15
  },
  second: {
    total: 515
  }
}

const total = (type: keyof Data) => {
  return {
    status: 'Total',
    test: data?.[type].total
  }
}

total('first')

Working snippet