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

Relaterte artikler