tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(15,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'number'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(21,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'string'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(22,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'string'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(28,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'boolean'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(29,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'boolean'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(35,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'Date'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(36,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'Date'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(42,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'RegExp'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(43,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'RegExp'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(49,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type '{ bar: number; }'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(50,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type '{ bar: number; }'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(56,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'number[]'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(57,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'number[]'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(63,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'I8'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(64,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'I8'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(70,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'A'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(71,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'A'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(77,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'A2<number>'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(78,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'A2<number>'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(84,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type '(x: any) => number'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(85,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type '(x: any) => number'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(91,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type '<T>(x: T) => T'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(92,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type '<T>(x: T) => T'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(99,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'E2'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(110,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'typeof f'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(111,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'typeof f'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(121,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'typeof c'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(122,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'typeof c'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(128,5): error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'T'.
tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts(129,5): error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'T'.


==== tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/unionSubtypeIfEveryConstituentTypeIsSubtype.ts (30 errors) ====
    enum e {
        e1,
        e2
    }
    
    // A union type U is a subtype of a type T if each type in U is a subtype of T
    interface I {
        [x: string]: any;
        foo: string | number; // ok
        foo2: e | number; // ok
    }
    interface I2 {
        [x: string]: number;
        // S is union type and each constituent type of S is a subtype of T
        foo: string | number; // error string is not subtype of number
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'number'.
        foo2: e | number; // ok e and number both subtype of number
    }
    
    interface I3 {
        [x: string]: string;
        foo: string | number; // error numer is not subtype of string
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'string'.
        foo2: e | number; // error e and number both not subtype of string
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'string'.
    }
    
    // error cases
    interface I4 {
        [x: string]: boolean;
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'boolean'.
        foo2: e | number;
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'boolean'.
    }
    
    
    interface I5 {
        [x: string]: Date;
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'Date'.
        foo2: e | number;
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'Date'.
    }
    
    
    interface I6 {
        [x: string]: RegExp;
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'RegExp'.
        foo2: e | number;
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'RegExp'.
    }
    
    
    interface I7 {
        [x: string]: { bar: number };
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type '{ bar: number; }'.
        foo2: e | number;
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type '{ bar: number; }'.
    }
    
    
    interface I8 {
        [x: string]: number[];
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'number[]'.
        foo2: e | number;
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'number[]'.
    }
    
    
    interface I9 {
        [x: string]: I8;
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'I8'.
        foo2: e | number;
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'I8'.
    }
    
    class A { foo: number; }
    interface I10 {
        [x: string]: A;
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'A'.
        foo2: e | number;
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'A'.
    }
    
    class A2<T> { foo: T; }
    interface I11 {
        [x: string]: A2<number>;
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'A2<number>'.
        foo2: e | number;
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'A2<number>'.
    }
    
    
    interface I12 {
        [x: string]: (x) => number;
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type '(x: any) => number'.
        foo2: e | number;
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type '(x: any) => number'.
    }
    
    
    interface I13 {
        [x: string]: <T>(x: T) => T;
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type '<T>(x: T) => T'.
        foo2: e | number;
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type '<T>(x: T) => T'.
    }
    
    
    enum E2 { A }
    interface I14 {
        [x: string]: E2;
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'E2'.
        foo2: e | number;
    }
    
    
    function f() { }
    module f {
        export var bar = 1;
    }
    interface I15 {
        [x: string]: typeof f;
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'typeof f'.
        foo2: e | number;
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'typeof f'.
    }
    
    
    class c { baz: string }
    module c {
        export var bar = 1;
    }
    interface I16 {
        [x: string]: typeof c;
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'typeof c'.
        foo2: e | number;
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'typeof c'.
    }
    
    
    interface I17<T> {
        [x: string]: T;
        foo: string | number;
        ~~~~~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo' of type 'string | number' is not assignable to string index type 'T'.
        foo2: e | number;
        ~~~~~~~~~~~~~~~~~
!!! error TS2411: Property 'foo2' of type 'number' is not assignable to string index type 'T'.
    }
    
    interface I19 {
        [x: string]: Object;
        foo: string | number;
        foo2: e | number;
    }
    
    
    interface I20 {
        [x: string]: {};
        foo: string | number;
        foo2: e | number;
    }