javascript - deklarera nyckeltyp för for in-loop i typescript
Jag har nedanstående kod
const urlParams = new URLSearchParams(window.location.search);
interface PersonType {
fname: string
lname: string
}
const person: PersonType = {fname:"John", lname:"Doe"};
const newObj = {
newobj: "new value"
}
for(const key in person) {
urlParams.append(key, newObj[key]); //error
}
https://codesandbox.io/s/vanilla-ts?utm_source=dotnew&file=/src/index.ts:0-500
hur ska jag deklarera 's nyckelsträng i for-in-loopen?
Svar #1
I TypeScript kommer for..in endast att skriva typen på nyckeln som itereras över som en string - inte som en nyckel i objektet som itereras över. Eftersom key är typad som en sträng, inte som newObj, kan du inte använda newObj[key], eftersom den generiska strängen inte finns på typen.
Använd Object.entries istället, för att extrahera nyckeln och värdet på en gång, istället för att försöka gå igenom bara nyckeln:
for(const [key, val] of Object.entries(newObj) {
urlParams.append(key, val);
}
Svar #2
const urlParams = new URLSearchParams(window.location.search);
interface PersonType {
fname: string
lname: string
}
const person: PersonType = {fname:"John", lname:"Doe"};
const newObj = {
newobj: "new value"
}
for(const key in person) {
urlParams.append(key, newObj[key as keyof PersonType]);
}
i newObj[key] lägg till as keyof PersonType
