javascript - Fel i reduce i typescript. Element har implicit typen 'any' eftersom uttryck av typen
Jag har den här koden. I princip är det ett objekt med elevers betyg.
let students: {
[k: number]: string[]
} = {};
students[1] = ["Student 1", "Student 2"];
students[2] = ["Student 3", "Student 4"];
console.log(students);
Object.keys(students).reduce((c, v) => {
c[v] = 111; //Im assigning some values here. THE ERROR IS POINTING HERE
return c;
}, {});Felet jag får:
Element har implicit typen 'any' eftersom uttryck av typen 'string' inte kan användas för att indexera typen '{}'. Ingen indexsignatur med en parameter av typen 'string' hittades på typen '{}'.
Den förväntade utdata bör vara: 111 är bara ett dummydata. Jag kommer att lägga in några mer relevanta data där.
{1: 111, 2: 111}
Tack i förväg.
Svar #1
Jag tror att numret du använder har konverterats till sträng, så du kan bara använda strängen som nyckel (även om det inte är relaterat till problemet här) Du kan lösa problemet genom att lägga till
{} as { [k: string]: any }
type Student = {
[k: string]: string[];
};
let students: Student = {};
students[1] = ["Student 1", "Student 2"];
students[2] = ["Student 3", "Student 4"];
console.log(students);
const keys = Object.keys(students);
const foo = keys.reduce(
(c, v) => {
c[v] = 111;
return c;
},
{} as { [k: string]: any },
);
console.log("foo", foo);
Svar #2
Funktionen reduce() är typad som en generisk funktion som accepterar en typparameter, så du behöver inte använda en typomvandling:
type Student = {
[k: string]: string[];
};
const students: Student = {};
students[1] = ["Student 1", "Student 2"];
students[2] = ["Student 3", "Student 4"];
const keys = Object.keys(students);
const foo = keys.reduce<{[k: string]: any}>(
(c, v) => {
c[v] = 111;
return c;
},
{},
);
console.log("foo", foo);
Lekplatslänk
