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') { }

Relaterte artikler