typescript - Spre enum med verdier fra en annen enum


Jeg prøver å spre en hel enum med to verdier fra en annen enum. Typen jeg får for lockProspectReasons er ganske merkelig. Resultatet av konstantene bør være et array av disse grunnene som strenger. Jeg prøver å typisere alle disse under LockChangeReason[] og alle lykkes unntatt lockProspectReasons.

 enum LockReason {
  Cancel = 'Cancel',
  Ban = 'Ban',
  CloseAccount = 'CloseAccount',
}

 enum UnlockReason {
  Unban = 'Unban',
}

 enum SharedReason {
  Other = 'Other',
}

// (LockReason | SharedReason.Other)[]
const lockCustomerReasons = Object.values({ ...LockReason, ...SharedReason });
// (SharedReason.Other | UnlockReason.Unban)[]
const unlockCustomerReasons = Object.values({ ...UnlockReason, ...SharedReason });
// WHAT?
const lockProspectReasons = Object.values({
  ...[LockReason.Cancel, LockReason.Ban],
  ...SharedReason,
});

type LockChangeReason = (LockReason | UnlockReason) | SharedReason;
const reason1: LockChangeReason[] = lockCustomerReasons;
const reason2: LockChangeReason[] = unlockCustomerReasons;
const reason3: LockChangeReason[] = lockProspectReasons;

Er syntaksen min feil? Hvordan kan jeg muligens definere lockProspectReasons slik at jeg får riktig resultat ['Cancel', 'Ban', 'Other'] og typen ikke er rar?

Her er en TypeScript-lekeplass

Svar #1

Dette burde fungere:

const lockProspectReasons = [LockReason.Cancel, LockReason.Ban, ...Object.values(SharedReason)];

Relaterte artikler