Hvordan iterere over egenskapene til en kartlagt type med typesikkerhet i TypeScript?
Dette virker trivielt, men jeg ser ikke ut til å kunne finne svaret jeg leter etter.
Jeg har en kartlagt type slik:
type TagTransformations = {
[P in keyof HTMLElementTagNameMap]?: keyof HTMLElementTagNameMap; // HTMLElementTagNameMap by the way is a built-in interface
}
Så, som du nok kan se fra typen ovenfor, vil jeg kunne ha et objekt med følgende form:
let transformations: TagTransformations = {
p: 'div',
h1: 'h2',
button: 'span',
}
I utgangspunktet vil jeg ha en keyof HTMLElementTagNameMap på begge sider.
Nå har jeg en funksjon som mottar et TagTransformations-objekt. I den funksjonen ønsker jeg å iterere over egenskapene som har blitt spesifisert, og få tak i verdien deres. Jeg gjør dette ved å bruke en for...in-løkke. Slik:
function doTransformations(transformations: TagTransformations) {
for (let tagName in transformations) {
// But "tagName" is of type "string" :(
// And "transformations[tagName]" is of type "any" :(
}
}
Men problemet er at typen til tagName inne i løkken er 'string', mens jeg forventer at den skal være keyof HTMLElementTagNameMap eller kanskje Extract<keyof HTMLElementTagNameMap, string>.
Også er typen til transformations[tagName] «any», i stedet for keyof HTMLElementTagNameMap.
Finnes det noen måte jeg kan oppnå det jeg ønsker her? Jeg vil iterere over egenskapene til en kartlagt type og også ha typesikkerhet slik jeg beskrev.
Jeg er ny på TypeScript, så hvis det er noe jeg gjør fundamentalt feil, gi meg beskjed.
Takk.