Kan jeg definere en TypeScript-type som alle mulige resulterende værdier fra typeof?


Jeg ønsker at definere en type som alle de mulige resulterende værdier fra at bruge typeof-operatoren på noget.

Essentielt leder jeg efter en hurtigere måde at gøre dette på, uden nogen form for mellemfunktion eller variabel.

function getTypeOf(value: any) {
  return typeof value;
}

type T0 = ReturnType<typeof getTypeOf>; // "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"

Hvordan kan jeg få TypeScript til at generere den samme T0-type ("string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function") uden en mellemliggende funktion eller variabel, hvis eneste formål er at hjælpe med at generere denne type?

Bemærk: dette har ikke meget praktisk anvendelse på nuværende tidspunkt, jeg er bare nysgerrig efter, om dette er muligt.

Svar #1

Dette virker og er en smule kortere end din:

const uselessVariable = typeof (1 as any);

// type Test = "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
type Test = typeof uselessVariable;

Desværre ser det ud til, at der ikke er nogen måde at gøre dette på uden at oprette en ubrugelig mellemliggende variabel; noget som type Test=typeof typeof (1 as any) ville være enklere, men det er ikke tilladt:

TypeScript begrænser bevidst de slags udtryk, du kan bruge typeof på.

Specifikt er det kun lovligt at bruge typeof på identifikatorer (dvs. variabelnavne) eller deres egenskaber.

Så det er en syntaksfejl at bruge typeof i en typekontekst, medmindre det efterfølges af et identifier. Det betyder, at det virkelig er nødvendigt at erklære et identifier (i Javascript-verdenen) for at konstruere den type, du ønsker programmæssigt.

Legeplads link

Relaterede artikler