TypeScript smal generisk funksjon
La oss si at vi har en generell funksjon
function hi<T>(name: T) { }
hi('Alex')
hi('Jim')
Jeg vil lage en ny funksjon som begrenser den generiske typen, og som kun tillater Alex som name. Noe som pseudo-koden nedenfor
function hiAlex = hi<'Alex'>
hiAlex('Alex') // works well
hiAlex('Jim') // ERROR wrong name type
Svar #1
Det finnes dessverre ingen dedikert syntaks for dette. Det beste vi kan gjøre er å gjenta signaturen slik den ville blitt instansiert ved kallet:
function hi<T>(name: T) { }
const hiAlex: (name: "Alex") => void = hi;
hiAlex('Alex') // works well
hiAlex('Jim') // ERROR wrong name type
Svar #2
function hi<T>(name: T extends string ? 'Alex' : T) { }
hi('Alex')
hi('Jim') // Argument of type '"Jim"' is not assignable to parameter of type '"Alex"'
Noe sånt burde fungere, hvis jeg forsto spørsmålet ditt riktig.
Eller ikke gjør det generisk:
function hi(name: 'Alex') { }Eller
function hi<T>(name: 'Alex') { }