javascript - Typescript: Konverter union av lignende objekter til objekttype


Hvordan transformere en union av lignende objekter til objekt type ved bruk av TypeScript-typinger?

Inndata

type I = {
  key: 'foo',
  value: Foo,
} | {
  key: 'bar',
  value: Bar,
};

Utdata

type O = {
  foo: Foo,
  bar: Bar,
};

Jeg er ikke sikker på om det er mulig. Men hvem vet? Merk at oppgaven ikke er en duplisering av den.

Svar #1

I TypeScript 4.1 er dette en enkel kartlagt type med nøkkel-omkartlegging. Du kan iterere over hvert medlem T av I-unionen (det er en union, ikke en snitt) og slå opp nøkkel-/verditypene: T['key'] for nøkkelen og T['value'] for verdien. Slik:

type O = { [T in I as T['key']]: T['value'] };
/* type O = {
    foo: Foo;
    bar: Bar;
} */

Lenke til kode på lekeplassen

Relaterte artikler