type UnionValidatorConfig<Key extends string, Config> = {
  readonly [Variant in keyof Config]: Validatable<any> & {
    validate: (input: any) => {
      readonly [K in Key]: Variant
    }
  }
}
ExtractRequiredKeys