#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')