Typescript: generisk som utökar en typ med en generisk (högre slags typer)


Säg att jag har ett gränssnitt:

interface Applicative<T> {}

Nu vill jag definiera en funktion f som:

  • tar en funktion och tar en typ U som utökar en Applicative som omsluter Any
  • och returnerar en U som omsluter en funktion

Hur definierar jag detta i Typescript? Jag försökte följande men det är inte giltigt:

function f<U extends Applicative>(fn: Function, a: U<any>): U<Function>

Svar #1

Tyvärr implementerar inte TypeScript ännu högre ordningens typer.

Se microsoft/typescript#1213 - Tillåt att klasser är parametriska i andra parametriska klasser för mer information.

Även om du kan tycka att detta tillvägagångssätt är användbart som en lösning: microsoft/typescript#40928 Att använda this-typ med intersections typ gör det möjligt att simulera HKT

Relaterade artiklar