typescript - Tillåt endast en viss uppsättning strängar som nycklar i ett gränssnitt
Jag skulle vilja kunna ändra nedanstående så att det nästlade objektet endast kan ha en viss uppsättning nycklar, låt oss säga foo eller bar, och tillåter, men kräver inte, alla i uppsättningen.
interface ConfigObject {
[key:string]: {
[key:string]:string
// this compiles, and allows any number of keys (good), but allows any string as the key (bad)
}
}
Jag försökte byta till
interface ConfigObject {
[key:string]: {
"foo"|"bar":string
}
}
men detta misslyckas att kompileras som ett syntaxfel, försökte också sätta i en array, parenteser. En enda sträng fungerar men inte flera.
Jag kan göra:
interface ConfigObject {
[key:string]: {
[K in "foo"|"bar"]:string
}
}
(https://stackoverflow.com/a/51659490/8940624)
Men detta gör foo OCH bar obligatoriska, så ett nästlat objekt med endast foo eller endast bar kommer att misslyckas.
Svar #1
Din senaste implementation var nära, du behöver bara markera egenskaperna som valfria med hjälp av ?-operatorn:
interface ConfigObject {
[key: string]: {
[key in "foo" | "bar"]?: string;
};
}
