Поскольку вы обновляете объект с указанным типом c, TS хочет знать, что summaryType
является действительным именем свойства (ключом) для типа data
. В этом случае вы можете просто определить summaryType
как ключ Summary, буквально:
const updateData = (summaryType: keyof Summary) => {
data[summaryType] += 1
}
Если у вас есть литерал объекта, а не его тип, вы можете использовать typeof obj
, чтобы получить его введите и снова keyof
, чтобы получить действительные ключи:
const obj = {
a: 1,
b: 2,
c: 3
}
const ObjType = typeof obj;
function update(type: keyof ObjectType) { // or just `keyof typeof obj`
obj[type] += 1;
}
Если вы не знаете тип или если вы хотите игнорировать ошибку, вы можете просто использовать data[summaryType as any]
, даже если это не является хорошей практикой, поскольку вы вносите в свой код потенциальные ошибки, которых избегает программа проверки TS.