Published on

Ts forçando um tipo ou outro

Author

Ao fazer um tipo | outro, estamos forçando que essa ou aquela propriedade seja obrigatória em um tipo, mas não no outro.

export type FormConfirmationProps<V extends FormValues> = {
  requireConfirmation: true
  onConfirm: OnConfirmForm<V>
  onSubmit?: never
}

export type FormNoConfirmationProps<V extends FormValues> = {
  requireConfirmation?: never
  onConfirm?: never
  onSubmit: OnSubmitForm<V>
}

export type FormProviderProps<V extends FormValues> = {
  ...
} & (FormConfirmationProps<V> | FormNoConfirmationProps<V>)