Korrekt sätt att hantera en Partial Record med iteration som inte visar undefined i TypeScript?
Jag försöker hitta rätt sätt att skriva ett logiskt Dictionary-objekt i TypeScript. Record och Partial-typerna tillsammans fungerar inte på det sätt jag vill -- mitt "önskemål" är att det ska bete sig som en vanlig ordbok/karta som finns i andra språk.
Givet en dict: Dictionary<K,V> vill jag:
dict.keyatt ha typenundefined|Veftersom nyckeln kanske inte finnsObject.values(dict)för att ha typenIterable<V>Object.entries(dict)för att ha typenIterable<[K, V]>Object.keys(dict)för att ha typenIterable<K>
Record<K,V> fungerar inte, eftersom åtkomst via nyckel alltid ger värdetypen V, även om nyckeln kanske inte finns.
Partial<Record<K,V>> fungerar inte, eftersom Object.values då returnerar en typ av Iterable<V|undefined>
Hur kan jag korrekt definiera en Dictionary-typ som fungerar med standard JS-objekt?
Det är okej om jag måste åsidosätta definitionerna av Object.values/entries/keys för en Dictionary-typ. Jag är inte säker på hur jag åsidosätter Object-funktioner endast för specifika typer.
Observera: Jag är medveten om mycket av historien kring dessa typer här. Jag är intresserad av att hitta en lösning som fungerar. Ovanstående Dictionary är ett vanligt typningsparadigm som finns i många språk, så jag skulle vilja att det är möjligt i TypeScript.
Svar #1
För tillfället verkar det inte finnas något sätt att korrekt modellera en Dictionary-typ i TypeScript.
En fråga om TypeScript-projektet anger noUncheckedIndexedAccess som ett alternativ, men det är en global flagga som går bortom poster och markerar även viss giltig användning av arrayer.