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
