Xor

tsz is 2.0x faster 2717 lines 44 KB

Timing

tsz
150.61ms
tsgo
306.36ms

Files

import { IsUnknown } from "../is-unknown";
import { Prettify } from "../prettify";

// When Type2 is unknown, it creates type with all properties excluded from it
// e.g. Without<{ foo: number; bar: number }, unknown> is { foo?: never; bar?: never }
// https://github.com/ts-essentials/ts-essentials/issues/400

type Without<Type1, Type2> = IsUnknown<Type2> extends true
  ? never
  : { [P in Exclude<keyof Type1, keyof Type2>]?: never };

// This utility type body is autogenerated in JS by running:
// const types = Array(50).fill(0).map((_, index) => `Type${index + 1}`)
// types.map(type => `Without<${types.filter(t => t !== type).join('&')}, ${type}> & ${type}`).join('|')
export type XOR<
  Type1,
  Type2,
  Type3 = unknown,
  Type4 = unknown,
  Type5 = unknown,
  Type6 = unknown,
  Type7 = unknown,
  Type8 = unknown,
  Type9 = unknown,
  Type10 = unknown,
  Type11 = unknown,
  Type12 = unknown,
  Type13 = unknown,
  Type14 = unknown,
  Type15 = unknown,
  Type16 = unknown,
  Type17 = unknown,
  Type18 = unknown,
  Type19 = unknown,
  Type20 = unknown,
  Type21 = unknown,
  Type22 = unknown,
  Type23 = unknown,
  Type24 = unknown,
  Type25 = unknown,
  Type26 = unknown,
  Type27 = unknown,
  Type28 = unknown,
  Type29 = unknown,
  Type30 = unknown,
  Type31 = unknown,
  Type32 = unknown,
  Type33 = unknown,
  Type34 = unknown,
  Type35 = unknown,
  Type36 = unknown,
  Type37 = unknown,
  Type38 = unknown,
  Type39 = unknown,
  Type40 = unknown,
  Type41 = unknown,
  Type42 = unknown,
  Type43 = unknown,
  Type44 = unknown,
  Type45 = unknown,
  Type46 = unknown,
  Type47 = unknown,
  Type48 = unknown,
  Type49 = unknown,
  Type50 = unknown,
> = Prettify<
  | (Without<
      Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type1
    > &
      Type1)
  | (Without<
      Type1 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type2
    > &
      Type2)
  | (Without<
      Type1 &
        Type2 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type3
    > &
      Type3)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type4
    > &
      Type4)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type5
    > &
      Type5)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type6
    > &
      Type6)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type7
    > &
      Type7)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type8
    > &
      Type8)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type9
    > &
      Type9)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type10
    > &
      Type10)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type11
    > &
      Type11)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type12
    > &
      Type12)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type13
    > &
      Type13)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type14
    > &
      Type14)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type15
    > &
      Type15)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type16
    > &
      Type16)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type17
    > &
      Type17)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type18
    > &
      Type18)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type19
    > &
      Type19)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type20
    > &
      Type20)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type21
    > &
      Type21)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type22
    > &
      Type22)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type23
    > &
      Type23)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type24
    > &
      Type24)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type25
    > &
      Type25)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type26
    > &
      Type26)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type27
    > &
      Type27)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type28
    > &
      Type28)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type29
    > &
      Type29)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type30
    > &
      Type30)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type31
    > &
      Type31)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type32
    > &
      Type32)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type33
    > &
      Type33)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type34
    > &
      Type34)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type35
    > &
      Type35)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type36
    > &
      Type36)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type37
    > &
      Type37)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type38
    > &
      Type38)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type39
    > &
      Type39)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type40
    > &
      Type40)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type41
    > &
      Type41)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type42
    > &
      Type42)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type43
    > &
      Type43)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type44
    > &
      Type44)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type46 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type45
    > &
      Type45)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type47 &
        Type48 &
        Type49 &
        Type50,
      Type46
    > &
      Type46)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type48 &
        Type49 &
        Type50,
      Type47
    > &
      Type47)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type49 &
        Type50,
      Type48
    > &
      Type48)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type50,
      Type49
    > &
      Type49)
  | (Without<
      Type1 &
        Type2 &
        Type3 &
        Type4 &
        Type5 &
        Type6 &
        Type7 &
        Type8 &
        Type9 &
        Type10 &
        Type11 &
        Type12 &
        Type13 &
        Type14 &
        Type15 &
        Type16 &
        Type17 &
        Type18 &
        Type19 &
        Type20 &
        Type21 &
        Type22 &
        Type23 &
        Type24 &
        Type25 &
        Type26 &
        Type27 &
        Type28 &
        Type29 &
        Type30 &
        Type31 &
        Type32 &
        Type33 &
        Type34 &
        Type35 &
        Type36 &
        Type37 &
        Type38 &
        Type39 &
        Type40 &
        Type41 &
        Type42 &
        Type43 &
        Type44 &
        Type45 &
        Type46 &
        Type47 &
        Type48 &
        Type49,
      Type50
    > &
      Type50)
>;