首页 > 解决方案 > 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[]'.为什么我得到这个以及如何解决这个问题?

标签: javascripttypescript

解决方案


您正在这里寻找可选的链接运算符并且 data?.[type]是正确的语法。

如果只是尝试读取对象字段,TS 也会抛出错误object[property]。它正确地假设不可能仅使用 any 读取对象属性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')

工作片段


推荐阅读