Typescript: Hur man härleder typen på den andra parametern baserat på den första i TypeScript-generics


Jag har försökt utan framgång att härleda typningen av den andra generiska parametern baserat på den första. För närvarande har jag följande implementation.

interface IProps {
  [propertyName: string ]: boolean | number | string
}

class myClass <T extends IProps> {
...
private _map = new Map < keyof T, Array< T[keyof T]>>();
...
}

Problemet är att jag inte kan begränsa typningen av arrayen beroende på den kopplade typen av posten i mappen.

Om jag har en

{ 
  x:"string",
  y:0
}

Jag skulle vilja begränsa min karta så att jag bara skulle kunna hänvisa till Array<string> när jag anropar _map.get("x") och endast Array<number> när jag anropar _map.get("y").

Svar #1

Det finns inget samband mellan keyof T och Array<T[keyof T]>.

Vilken som helst nyckel från T kommer att returnera vilken typ av värde som helst från T.