=== tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/nullIsSubtypeOfEverythingButUndefined.ts === // null is a subtype of any other types except undefined var r0 = true ? null : null; >r0 : any >true ? null : null : null >true : boolean >null : null >null : null var r0 = true ? null : null; >r0 : any >true ? null : null : null >true : boolean >null : null >null : null var u: typeof undefined; >u : any >undefined : undefined var r0b = true ? u : null; >r0b : any >true ? u : null : any >true : boolean >u : any >null : null var r0b = true ? null : u; >r0b : any >true ? null : u : any >true : boolean >null : null >u : any var r1 = true ? 1 : null; >r1 : number >true ? 1 : null : number >true : boolean >1 : number >null : null var r1 = true ? null : 1; >r1 : number >true ? null : 1 : number >true : boolean >null : null >1 : number var r2 = true ? '' : null; >r2 : string >true ? '' : null : string >true : boolean >'' : string >null : null var r2 = true ? null : ''; >r2 : string >true ? null : '' : string >true : boolean >null : null >'' : string var r3 = true ? true : null; >r3 : boolean >true ? true : null : boolean >true : boolean >true : boolean >null : null var r3 = true ? null : true; >r3 : boolean >true ? null : true : boolean >true : boolean >null : null >true : boolean var r4 = true ? new Date() : null; >r4 : Date >true ? new Date() : null : Date >true : boolean >new Date() : Date >Date : DateConstructor >null : null var r4 = true ? null : new Date(); >r4 : Date >true ? null : new Date() : Date >true : boolean >null : null >new Date() : Date >Date : DateConstructor var r5 = true ? /1/ : null; >r5 : RegExp >true ? /1/ : null : RegExp >true : boolean >/1/ : RegExp >null : null var r5 = true ? null : /1/; >r5 : RegExp >true ? null : /1/ : RegExp >true : boolean >null : null >/1/ : RegExp var r6 = true ? { foo: 1 } : null; >r6 : { foo: number; } >true ? { foo: 1 } : null : { foo: number; } >true : boolean >{ foo: 1 } : { foo: number; } >foo : number >1 : number >null : null var r6 = true ? null : { foo: 1 }; >r6 : { foo: number; } >true ? null : { foo: 1 } : { foo: number; } >true : boolean >null : null >{ foo: 1 } : { foo: number; } >foo : number >1 : number var r7 = true ? () => { } : null; >r7 : () => void >true ? () => { } : null : () => void >true : boolean >() => { } : () => void >null : null var r7 = true ? null : () => { }; >r7 : () => void >true ? null : () => { } : () => void >true : boolean >null : null >() => { } : () => void var r8 = true ? (x: T) => { return x } : null; >r8 : (x: T) => T >true ? (x: T) => { return x } : null : (x: T) => T >true : boolean >(x: T) => { return x } : (x: T) => T >T : T >x : T >T : T >x : T >null : null var r8b = true ? null : (x: T) => { return x }; // type parameters not identical across declarations >r8b : (x: T) => T >true ? null : (x: T) => { return x } : (x: T) => T >true : boolean >null : null >(x: T) => { return x } : (x: T) => T >T : T >x : T >T : T >x : T interface I1 { foo: number; } >I1 : I1 >foo : number var i1: I1; >i1 : I1 >I1 : I1 var r9 = true ? i1 : null; >r9 : I1 >true ? i1 : null : I1 >true : boolean >i1 : I1 >null : null var r9 = true ? null : i1; >r9 : I1 >true ? null : i1 : I1 >true : boolean >null : null >i1 : I1 class C1 { foo: number; } >C1 : C1 >foo : number var c1: C1; >c1 : C1 >C1 : C1 var r10 = true ? c1 : null; >r10 : C1 >true ? c1 : null : C1 >true : boolean >c1 : C1 >null : null var r10 = true ? null : c1; >r10 : C1 >true ? null : c1 : C1 >true : boolean >null : null >c1 : C1 class C2 { foo: T; } >C2 : C2 >T : T >foo : T >T : T var c2: C2; >c2 : C2 >C2 : C2 var r12 = true ? c2 : null; >r12 : C2 >true ? c2 : null : C2 >true : boolean >c2 : C2 >null : null var r12 = true ? null : c2; >r12 : C2 >true ? null : c2 : C2 >true : boolean >null : null >c2 : C2 enum E { A } >E : E >A : E var r13 = true ? E : null; >r13 : typeof E >true ? E : null : typeof E >true : boolean >E : typeof E >null : null var r13 = true ? null : E; >r13 : typeof E >true ? null : E : typeof E >true : boolean >null : null >E : typeof E var r14 = true ? E.A : null; >r14 : E >true ? E.A : null : E >true : boolean >E.A : E >E : typeof E >A : E >null : null var r14 = true ? null : E.A; >r14 : E >true ? null : E.A : E >true : boolean >null : null >E.A : E >E : typeof E >A : E function f() { } >f : typeof f module f { >f : typeof f export var bar = 1; >bar : number >1 : number } var af: typeof f; >af : typeof f >f : typeof f var r15 = true ? af : null; >r15 : typeof f >true ? af : null : typeof f >true : boolean >af : typeof f >null : null var r15 = true ? null : af; >r15 : typeof f >true ? null : af : typeof f >true : boolean >null : null >af : typeof f class c { baz: string } >c : c >baz : string module c { >c : typeof c export var bar = 1; >bar : number >1 : number } var ac: typeof c; >ac : typeof c >c : typeof c var r16 = true ? ac : null; >r16 : typeof c >true ? ac : null : typeof c >true : boolean >ac : typeof c >null : null var r16 = true ? null : ac; >r16 : typeof c >true ? null : ac : typeof c >true : boolean >null : null >ac : typeof c function f17(x: T) { >f17 : (x: T) => void >T : T >x : T >T : T var r17 = true ? x : null; >r17 : T >true ? x : null : T >true : boolean >x : T >null : null var r17 = true ? null : x; >r17 : T >true ? null : x : T >true : boolean >null : null >x : T } function f18(x: U) { >f18 : (x: U) => void >T : T >U : U >x : U >U : U var r18 = true ? x : null; >r18 : U >true ? x : null : U >true : boolean >x : U >null : null var r18 = true ? null : x; >r18 : U >true ? null : x : U >true : boolean >null : null >x : U } //function f18(x: U) { // var r18 = true ? x : null; // var r18 = true ? null : x; //} var r19 = true ? new Object() : null; >r19 : Object >true ? new Object() : null : Object >true : boolean >new Object() : Object >Object : ObjectConstructor >null : null var r19 = true ? null : new Object(); >r19 : Object >true ? null : new Object() : Object >true : boolean >null : null >new Object() : Object >Object : ObjectConstructor var r20 = true ? {} : null; >r20 : {} >true ? {} : null : {} >true : boolean >{} : {} >null : null var r20 = true ? null : {}; >r20 : {} >true ? null : {} : {} >true : boolean >null : null >{} : {}