#typescript #angular11
#typescript #angular11
Вопрос:
*** Элементы неявно имеют тип ‘any’, потому что выражение типа ‘string’ нельзя использовать для индексирования ‘{}’ В типе ‘{}’ не найдена индексная подпись с параметром типа ‘string’
А также отображение объекта, возможно, не определено.
Я попытался реализовать этот код в файле typescript, но он показывает эти ошибки. Почему? Я не могу найти ошибку. пожалуйста, помогите.
getGlobalData() {
return this.http.get(this.globalDataUrl, { responseType: 'text' }).pipe(
map(result => {
let data: GlobalDataSummary[] = [];
let raw = {}
let rows = result.split('n');
rows.splice(0, 1);
// console.log(rows);
rows.forEach(row => {
let cols = row.split(/,(?=S)/)
let cs = {
country: cols[3],
confirmed: cols[7],
deaths: cols[8],
recovered: cols[9],
active: cols[10],
};
let temp: GlobalDataSummary = raw[cs.country];
if (temp) {
temp.active = cs.active temp.active
temp.confirmed = cs.confirmed temp.confirmed
temp.deaths = cs.deaths temp.deaths
temp.recovered = cs.recovered temp.recovered
raw[cs.country] = temp;
} else {
raw[cs.country] = cs;
}
})
return <GlobalDataSummary[]>Object.values(raw);
})
)
}
Комментарии:
1. Если вы просто хотите, чтобы ошибка исчезла,
let raw:any = {}
. Но это отнимает смысл Typescript. Вы могли бы даже создать индексный тип{ [string]:any}
. Но даже тогда вы теряете преимущества типизации, но я часто делаю это как временное решение при рефакторинге существующего кода, чтобы позже создать лучший тип.
Ответ №1:
выражение типа ‘string’ не может использоваться для индексирования ‘{}’
Это означает, что вы не можете сделать {}['somePropertyName']
. И это потому, что ваша raw
переменная не имеет явного типа, и ваш код инициализировал ее как {}
пустой объект, у которого нет индексатора свойств.
Вы можете указать raw
тип, который позволяет вашему коду получать его свойство через строковый индекс следующим образом:
let raw: {
[key: string]: any
};
Комментарии:
1. ОК. Спасибо. Ошибка устранена… Но…. Теперь в temp : GlobalDataSummary отображается, что «объект, возможно, не определен», а в return <GlobalDataSummary [] >объект . значения (raw), что «переменная raw используется перед назначением»…. Что мне делать?