#typescript #types
#typescript #типы
Вопрос:
извините, вопрос новичка…
я пытался найти способ объявить этот допустимый тип переменной ‘counts’.
const rawData = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
const getCountData = (rawData: string[]) => {
const counts: Map<string, number>[] = [];
rawData.forEach((x: string) => {
counts[x] = (counts[x] || 0) 1;
});
return Object.values(counts);
}
при использовании чистого javascript без объявления типа результат выглядит следующим образом:
[ a: 3, b: 2, c: 2, d: 2, e: 2, f: 1, g: 1, h: 3 ]
count[x] жалуется на несоответствие типа в typescript
Тип ‘String’ не может использоваться в качестве индексного типа.ts(2538)
есть какая-нибудь ссылка, с которой я могу свериться?
Комментарии:
1.
String
иstring
— это разные типы
Ответ №1:
В typescript
Map<String, Number>[]
означает массив Map<Строка, число>. Из вашего кода вы получаете карту, а не массив карт.
Вы должны использовать объект ( {}
), а не массив ( []
).
Кроме того, вы можете определить объект со строкой в качестве ключа и числом в качестве значения с помощью
const counts: { [key: string]: number } = {};
Весь ваш правильно введенный код был бы:
const getCountData = (rawData: string[]): number[] => {
const counts: { [key: string]: number } = {};
rawData.forEach((x: string) => {
counts[x] = (counts[x] || 0) 1;
});
return Object.values(counts);
}
Комментарии:
1. Какую ошибку вы получаете? Проверьте typescript playground, он работает правильно