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