tests/cases/conformance/types/conditional/conditionalTypes1.ts(16,5): error TS2322: Type 'T' is not assignable to type 'Diff<T, null | undefined>'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(21,5): error TS2322: Type 'T' is not assignable to type 'Diff<T, null | undefined>'.
  Type 'string | undefined' is not assignable to type 'Diff<T, null | undefined>'.
    Type 'undefined' is not assignable to type 'Diff<T, null | undefined>'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(22,9): error TS2322: Type 'T' is not assignable to type 'string'.
  Type 'string | undefined' is not assignable to type 'string'.
    Type 'undefined' is not assignable to type 'string'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(28,5): error TS2322: Type 'Partial<T>[keyof T]' is not assignable to type 'Diff<Partial<T>[keyof T], null | undefined>'.
  Type 'T[keyof T] | undefined' is not assignable to type 'Diff<Partial<T>[keyof T], null | undefined>'.
    Type 'undefined' is not assignable to type 'Diff<Partial<T>[keyof T], null | undefined>'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(100,5): error TS2322: Type 'Pick<T, { [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]>' is not assignable to type 'T'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(101,5): error TS2322: Type 'Pick<T, { [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]>' is not assignable to type 'T'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(103,5): error TS2322: Type 'Pick<T, { [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]>' is not assignable to type 'Pick<T, { [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]>'.
  Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
    Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
      Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
        Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
          Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
            Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
              Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
                Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(105,5): error TS2322: Type 'Pick<T, { [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]>' is not assignable to type 'Pick<T, { [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]>'.
  Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
    Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
      Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
        Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
          Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
            Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
              Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
                Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(111,5): error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
  Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(112,5): error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
  Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
    Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
      Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
        Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
          Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
            Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(113,5): error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
  Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(114,5): error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
  Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
    Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
      Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
        Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
          Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
            Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(131,10): error TS2540: Cannot assign to 'id' because it is a constant or a read-only property.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(132,5): error TS2542: Index signature in type 'DeepReadonlyArray<Part>' only permits reading.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(133,22): error TS2540: Cannot assign to 'id' because it is a constant or a read-only property.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(134,10): error TS2339: Property 'updatePart' does not exist on type 'DeepReadonlyObject<Part>'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(156,5): error TS2322: Type 'ZeroOf<T>' is not assignable to type 'T'.
  Type '0 | (T extends string ? "" : false)' is not assignable to type 'T'.
    Type '0' is not assignable to type 'T'.
      Type '"" | 0' is not assignable to type 'T'.
        Type '""' is not assignable to type 'T'.
tests/cases/conformance/types/conditional/conditionalTypes1.ts(157,5): error TS2322: Type 'T' is not assignable to type 'ZeroOf<T>'.
  Type 'string | number' is not assignable to type 'ZeroOf<T>'.
    Type 'string' is not assignable to type 'ZeroOf<T>'.


==== tests/cases/conformance/types/conditional/conditionalTypes1.ts (18 errors) ====
    type Diff<T, U> = T extends U ? never : T;
    type Filter<T, U> = T extends U ? T : never;
    type NonNullable<T> = Diff<T, null | undefined>;
    
    type T00 = Diff<"a" | "b" | "c" | "d", "a" | "c" | "f">;  // "b" | "d"
    type T01 = Filter<"a" | "b" | "c" | "d", "a" | "c" | "f">;  // "a" | "c"
    
    type T02 = Diff<string | number | (() => void), Function>;  // string | number
    type T03 = Filter<string | number | (() => void), Function>;  // () => void
    
    type T04 = NonNullable<string | number | undefined>;  // string | number
    type T05 = NonNullable<(() => string) | string[] | null | undefined>;  // (() => string) | string[]
    
    function f1<T>(x: T, y: NonNullable<T>) {
        x = y;
        y = x;  // Error
        ~
!!! error TS2322: Type 'T' is not assignable to type 'Diff<T, null | undefined>'.
    }
    
    function f2<T extends string | undefined>(x: T, y: NonNullable<T>) {
        x = y;
        y = x;  // Error
        ~
!!! error TS2322: Type 'T' is not assignable to type 'Diff<T, null | undefined>'.
!!! error TS2322:   Type 'string | undefined' is not assignable to type 'Diff<T, null | undefined>'.
!!! error TS2322:     Type 'undefined' is not assignable to type 'Diff<T, null | undefined>'.
        let s1: string = x;  // Error
            ~~
!!! error TS2322: Type 'T' is not assignable to type 'string'.
!!! error TS2322:   Type 'string | undefined' is not assignable to type 'string'.
!!! error TS2322:     Type 'undefined' is not assignable to type 'string'.
        let s2: string = y;
    }
    
    function f3<T>(x: Partial<T>[keyof T], y: NonNullable<Partial<T>[keyof T]>) {
        x = y;
        y = x;  // Error
        ~
!!! error TS2322: Type 'Partial<T>[keyof T]' is not assignable to type 'Diff<Partial<T>[keyof T], null | undefined>'.
!!! error TS2322:   Type 'T[keyof T] | undefined' is not assignable to type 'Diff<Partial<T>[keyof T], null | undefined>'.
!!! error TS2322:     Type 'undefined' is not assignable to type 'Diff<Partial<T>[keyof T], null | undefined>'.
    }
    
    type Options = { k: "a", a: number } | { k: "b", b: string } | { k: "c", c: boolean };
    
    type T10 = Diff<Options, { k: "a" | "b" }>;  // { k: "c", c: boolean }
    type T11 = Filter<Options, { k: "a" | "b" }>;  // { k: "a", a: number } | { k: "b", b: string }
    
    type T12 = Diff<Options, { k: "a" } | { k: "b" }>;  // { k: "c", c: boolean }
    type T13 = Filter<Options, { k: "a" } | { k: "b" }>;  // { k: "a", a: number } | { k: "b", b: string }
    
    type T14 = Diff<Options, { q: "a" }>;  // Options
    type T15 = Filter<Options, { q: "a" }>;  // never
    
    declare function f4<T extends Options, K extends string>(p: K): Filter<T, { k: K }>;
    let x0 = f4("a");  // { k: "a", a: number }
    
    type OptionsOfKind<K extends Options["k"]> = Filter<Options, { k: K }>;
    
    type T16 = OptionsOfKind<"a" | "b">;  // { k: "a", a: number } | { k: "b", b: string }
    
    type Select<T, K extends keyof T, V extends T[K]> = Filter<T, { [P in K]: V }>;
    
    type T17 = Select<Options, "k", "a" | "b">;  // // { k: "a", a: number } | { k: "b", b: string }
    
    type TypeName<T> =
        T extends string ? "string" :
        T extends number ? "number" :
        T extends boolean ? "boolean" :
        T extends undefined ? "undefined" :
        T extends Function ? "function" :
        "object";
    
    type T20 = TypeName<string | (() => void)>;  // "string" | "function"
    type T21 = TypeName<any>;  // "string" | "number" | "boolean" | "undefined" | "function" | "object"
    type T22 = TypeName<never>;  // "string" | "number" | "boolean" | "undefined" | "function" | "object"
    type T23 = TypeName<{}>;  // "object"
    
    type KnockoutObservable<T> = { object: T };
    type KnockoutObservableArray<T> = { array: T };
    
    type KnockedOut<T> = T extends any[] ? KnockoutObservableArray<T[number]> : KnockoutObservable<T>;
    
    type KnockedOutObj<T> = {
        [P in keyof T]: KnockedOut<T[P]>;
    }
    
    interface Item {
        id: number;
        name: string;
        subitems: string[];
    }
    
    type KOItem = KnockedOutObj<Item>;
    
    interface Part {
        id: number;
        name: string;
        subparts: Part[];
        updatePart(newName: string): void;
    }
    
    type FunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? K : never }[keyof T];
    type FunctionProperties<T> = Pick<T, FunctionPropertyNames<T>>;
    
    type NonFunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? never : K }[keyof T];
    type NonFunctionProperties<T> = Pick<T, NonFunctionPropertyNames<T>>;
    
    type T30 = FunctionProperties<Part>;
    type T31 = NonFunctionProperties<Part>;
    
    function f7<T>(x: T, y: FunctionProperties<T>, z: NonFunctionProperties<T>) {
        x = y;  // Error
        ~
!!! error TS2322: Type 'Pick<T, { [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]>' is not assignable to type 'T'.
        x = z;  // Error
        ~
!!! error TS2322: Type 'Pick<T, { [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]>' is not assignable to type 'T'.
        y = x;
        y = z;  // Error
        ~
!!! error TS2322: Type 'Pick<T, { [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]>' is not assignable to type 'Pick<T, { [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]>'.
!!! error TS2322:   Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
!!! error TS2322:     Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
!!! error TS2322:       Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
!!! error TS2322:         Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
!!! error TS2322:           Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
!!! error TS2322:             Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
!!! error TS2322:               Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
!!! error TS2322:                 Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
        z = x;
        z = y;  // Error
        ~
!!! error TS2322: Type 'Pick<T, { [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]>' is not assignable to type 'Pick<T, { [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]>'.
!!! error TS2322:   Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
!!! error TS2322:     Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
!!! error TS2322:       Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
!!! error TS2322:         Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
!!! error TS2322:           Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
!!! error TS2322:             Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
!!! error TS2322:               Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
!!! error TS2322:                 Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
    }
    
    function f8<T>(x: keyof T, y: FunctionPropertyNames<T>, z: NonFunctionPropertyNames<T>) {
        x = y;
        x = z;
        y = x;  // Error
        ~
!!! error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
!!! error TS2322:   Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
        y = z;  // Error
        ~
!!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
!!! error TS2322:   Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
!!! error TS2322:     Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'.
!!! error TS2322:       Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
!!! error TS2322:         Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
!!! error TS2322:           Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
!!! error TS2322:             Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'.
        z = x;  // Error
        ~
!!! error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
!!! error TS2322:   Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
        z = y;  // Error
        ~
!!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
!!! error TS2322:   Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
!!! error TS2322:     Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'.
!!! error TS2322:       Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
!!! error TS2322:         Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
!!! error TS2322:           Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
!!! error TS2322:             Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'.
    }
    
    type DeepReadonly<T> =
        T extends any[] ? DeepReadonlyArray<T[number]> :
        T extends object ? DeepReadonlyObject<T> :
        T;
    
    interface DeepReadonlyArray<T> extends ReadonlyArray<DeepReadonly<T>> {}
    
    type DeepReadonlyObject<T> = {
        readonly [P in NonFunctionPropertyNames<T>]: DeepReadonly<T[P]>;
    };
    
    function f10(part: DeepReadonly<Part>) {
        let name: string = part.name;
        let id: number = part.subparts[0].id;
        part.id = part.id;  // Error
             ~~
!!! error TS2540: Cannot assign to 'id' because it is a constant or a read-only property.
        part.subparts[0] = part.subparts[0];  // Error
        ~~~~~~~~~~~~~~~~
!!! error TS2542: Index signature in type 'DeepReadonlyArray<Part>' only permits reading.
        part.subparts[0].id = part.subparts[0].id;  // Error
                         ~~
!!! error TS2540: Cannot assign to 'id' because it is a constant or a read-only property.
        part.updatePart("hello");  // Error
             ~~~~~~~~~~
!!! error TS2339: Property 'updatePart' does not exist on type 'DeepReadonlyObject<Part>'.
    }
    
    type ZeroOf<T extends number | string | boolean> = T extends number ? 0 : T extends string ? "" : false;
    
    function zeroOf<T extends number | string | boolean>(value: T) {
        return <ZeroOf<T>>(typeof value === "number" ? 0 : typeof value === "string" ? "" : false);
    }
    
    function f20<T extends string>(n: number, b: boolean, x: number | boolean, y: T) {
        zeroOf(5);  // 0
        zeroOf("hello");  // ""
        zeroOf(true);  // false
        zeroOf(n);  // 0
        zeroOf(b);  // False
        zeroOf(x);  // 0 | false
        zeroOf(y);  // ZeroOf<T>
    }
    
    function f21<T extends number | string>(x: T, y: ZeroOf<T>) {
        let z1: number | string = y;
        let z2: 0 | "" = y;
        x = y;  // Error
        ~
!!! error TS2322: Type 'ZeroOf<T>' is not assignable to type 'T'.
!!! error TS2322:   Type '0 | (T extends string ? "" : false)' is not assignable to type 'T'.
!!! error TS2322:     Type '0' is not assignable to type 'T'.
!!! error TS2322:       Type '"" | 0' is not assignable to type 'T'.
!!! error TS2322:         Type '""' is not assignable to type 'T'.
        y = x;  // Error
        ~
!!! error TS2322: Type 'T' is not assignable to type 'ZeroOf<T>'.
!!! error TS2322:   Type 'string | number' is not assignable to type 'ZeroOf<T>'.
!!! error TS2322:     Type 'string' is not assignable to type 'ZeroOf<T>'.
    }
    
    type Extends<T, U> = T extends U ? true : false;
    type If<C extends boolean, T, F> = C extends true ? T : F;
    type Not<C extends boolean> = If<C, false, true>;
    type And<A extends boolean, B extends boolean> = If<A, B, false>;
    type Or<A extends boolean, B extends boolean> = If<A, true, B>;
    
    type isString<T> = Extends<T, string>;
    
    type Q1 = isString<number>;  // false
    type Q2 = isString<"abc">;  // true
    type Q3 = isString<any>;  // boolean
    type Q4 = isString<never>;  // boolean
    
    type N1 = Not<false>;  // true
    type N2 = Not<true>;  // false
    type N3 = Not<boolean>;  // boolean
    
    type A1 = And<false, false>;  // false
    type A2 = And<false, true>;  // false
    type A3 = And<true, false>;  // false
    type A4 = And<true, true>;  // true
    type A5 = And<boolean, false>;  // false
    type A6 = And<false, boolean>;  // false
    type A7 = And<boolean, true>;  // boolean
    type A8 = And<true, boolean>;  // boolean
    type A9 = And<boolean, boolean>;  // boolean
    
    type O1 = Or<false, false>;  // false
    type O2 = Or<false, true>;  // true
    type O3 = Or<true, false>;  // true
    type O4 = Or<true, true>;  // true
    type O5 = Or<boolean, false>;  // boolean
    type O6 = Or<false, boolean>;  // boolean
    type O7 = Or<boolean, true>;  // true
    type O8 = Or<true, boolean>;  // true
    type O9 = Or<boolean, boolean>;  // boolean
    
    type T40 = never extends never ? true : false;  // true
    type T41 = number extends never ? true : false;  // false
    type T42 = never extends number ? true : false;  // boolean
    