typescript - Objekttypning där värdet är en array av nycklar eller en tom array
Jag vill skriva ett objekt som detta:
const example = {
'meow': [],
'woof': [],
'quack': [],
'all': ['meow', 'woof', 'quack'],
'meowWoof': ['meow', 'woof'],
}
Ovan skulle vara giltigt. Du ser att det är meta eftersom värdena måste vara arrayer vars värden är nycklar i själva objektet.
Men detta skulle inte ske eftersom DOGS inte är en nyckel.
const example = {
'meow': [],
'woof': [],
'quack': [],
'all': ['meow', 'DOGS', 'quack'],
'meowWoof': ['meow', 'woof'],
}
Jag skulle vara okej med att omsluta det här objektet i en funktion för att få typningen att fungera.
Är detta möjligt?
Svar #1
Jag skulle använda en generell hjälpfunktion som denna:
const asExample = <T extends Record<keyof T, Array<keyof T>>>(t: T) => t;
Det beter sig som du verkar vilja att det ska:
const example = asExample({
'meow': [],
'woof': [],
'quack': [],
'all': ['meow', 'woof', 'quack'],
'meowWoof': ['meow', 'woof'],
}); // okay
const badExample = asExample({
'meow': [],
'woof': [],
'quack': [],
'all': ['meow', 'DOGS', 'quack'], // error here
'meowWoof': ['meow', 'woof'],
});
Hoppas det hjälper. Lycka till!
Länk till kod
