typescript - Skapa en typ som tar ett enum-argument
Jag försöker skapa en återanvändbar typ som använder Record-typen.
enum MyKeys {
ALPHA = 'ALPHA',
BETA = 'BETA',
GAMMA = 'GAMMA',
}
interface MyValues {
in: any[];
out: any[];
}
type Case<T> = Record<T, MyValues>;
Idealiskt kan jag använda Case<MyKeys> istället för Record<MyKeys, MyValues>.
Typen 'T' uppfyller inte begränsningen 'string | number | symbol'.
Typ 'T' kan inte tilldelas typen 'symbol'
Svar #1
Typargumentet T måste begränsas till en giltig indextyp:
type Case<T extends string> = Record<T, MyValues>;
Svar #2
De enda giltiga typerna som kan användas för nycklar är strängar, nummer och symboler. TypeScript tillhandahåller ett inbyggt alias för en sådan union som kallas PropertyKey.
Den inbyggda Record-typen kommer bara att acceptera en av dessa. Därför behöver din typkonstruktör ha samma begränsning också.
type Case<T extends PropertyKey> = Record<T, MyValues>;
