Typescript не позволяет динамически обращаться к свойству

#javascript #typescript

Вопрос:

У меня возникают некоторые проблемы, когда я пытаюсь получить доступ к свойству объекта в 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. как определяется «данные»?

2. @MarioVernari, чтобы получить доступ к total, я должен написать что-то вроде того, что эти data?.first.total данные являются объектом.

3. Вероятно data.first , это массив строк, который приводит к этой ошибке. Пожалуйста, обновите вопрос с более подробной информацией о структуре объекта данных.

4. Пожалуйста, добавьте свое определение данных в сообщение

5. @ShubhamKhatri, я обновил вопрос

Ответ №1:

Вы ищете здесь необязательный оператор цепочки и data?.[type] правильный синтаксис.

Также TS выдаст ошибку, если просто попытается прочитать поле объекта с object[property] помощью . Это правильно предполагает , что невозможно прочитать свойство объекта с помощью любого 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')

 

Рабочий фрагмент