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

Relaterade artiklar