typescript - Skicka olika funktion beroende på typ av generisk
Jag vill skriva en funktion som låter mig dispatcha baserat på typen av den generiska som passeras in. Jag bryr mig inte om körningens värde, BARA kompileringstidstypen:
const value: any;
const x: DateTime = parseAs<DateTime>(value)
const y: string = parseAs<string>(value)
const z: number = parseAs<number>(value)
Implementeringen av varje parseAs-funktion kan vi anta är irrelevant (bara att den tar ett värde av any och returnerar typen i A
Är detta möjligt? Det vill säga att kalla på en diff-funktion beroende på den generiska parametern som skickas in. Jag bryr mig inte om värdeparametern som skickas in, jag vill bara blint kalla på en parse-funktion på den.
Svar #1
Eftersom typinformation raderas innan utsändningssteget under kompilering, är det inte möjligt att påverka värden vid körning med hjälp av typinformation.
Men om ergonomi är ditt mål, kan du använda en överbelastad funktion för att uppnå ett starkt typat resultat som detta:
TS Lekplats
// I presume this is a type you created, so
// I'll set it to Date for this example:
type DateTime = Date;
type ParseFormat = 'DateTime' | 'string' | 'number';
function parseAs(format: 'DateTime', value: unknown): DateTime;
function parseAs(format: 'string', value: unknown): string;
function parseAs(format: 'number', value: unknown): number;
function parseAs(format: ParseFormat, value: unknown) {
// Actually implement
return undefined as any;
}
// Then using is just as ergonomic as supplying a type generic:
declare const value: any;
parseAs('DateTime', value); // DateTime
parseAs('string', value); // string
parseAs('number', value); // number
