typescript - Hvordan inferere typen til objektnøkler fra en streng-array
Jeg har følgende funksjon:
const infer = (...params: string[]): Record<string, string> => {
const obj: Record<string, string> = {};
// Put all params as keys with a random value to obj
// [...]
return obj;
}
Denne funksjonen vil ta n strenger og returnere et objekt som inneholder akkurat de strengene som nøkler, med tilfeldige verdier.
Så infer("abc", "def") kan returnere {"abc": "1337", "def":"1338"}.
Finnes det noen måte å utlede returtypen på for å få full typesikkerhet fra denne funksjonen? Koden i funksjonen garanterer at hver nøkkel vil være til stede i det returnerte objektet, og at hver verdi vil være en streng.
Svar #1
Du kunne erklært det slik:
const infer = <T extends string[]>(...params: T): Record<T[number], string> => {
const obj: Record<string, string> = {};
// Put all params as keys with a random value to obj
// [...]
return obj;
};
const t = infer("a", "b", "c") // const t: Record<"a" | "b" | "c", string>
Lekeplass
