=== tests/cases/conformance/statements/ifDoWhileStatements/ifDoWhileStatements.ts === interface I { >I : I id: number; >id : number } class C implements I { >C : C >I : I id: number; >id : number name: string; >name : string } class C2 extends C { >C2 : C2 >C : C valid: boolean; >valid : boolean } class D{ >D : D >T : T source: T; >source : T >T : T recurse: D; >recurse : D >D : D >T : T wrapped: D> >wrapped : D> >D : D >D : D >T : T } function F(x: string): number { return 42; } >F : (x: string) => number >x : string function F2(x: number): boolean { return x < 42; } >F2 : (x: number) => boolean >x : number >x < 42 : boolean >x : number module M { >M : typeof M export class A { >A : A name: string; >name : string } export function F2(x: number): string { return x.toString(); } >F2 : (x: number) => string >x : number >x.toString() : string >x.toString : (radix?: number) => string >x : number >toString : (radix?: number) => string } module N { >N : typeof N export class A { >A : A id: number; >id : number } export function F2(x: number): string { return x.toString(); } >F2 : (x: number) => string >x : number >x.toString() : string >x.toString : (radix?: number) => string >x : number >toString : (radix?: number) => string } // literals if (true) { } while (true) { } do { }while(true) if (null) { } while (null) { } do { }while(null) if (undefined) { } >undefined : undefined while (undefined) { } >undefined : undefined do { }while(undefined) >undefined : undefined if (0.0) { } while (0.0) { } do { }while(0.0) if ('a string') { } while ('a string') { } do { }while('a string') if ('') { } while ('') { } do { }while('') if (/[a-z]/) { } while (/[a-z]/) { } do { }while(/[a-z]/) if ([]) { } >[] : undefined[] while ([]) { } >[] : undefined[] do { }while([]) >[] : undefined[] if ([1, 2]) { } >[1, 2] : number[] while ([1, 2]) { } >[1, 2] : number[] do { }while([1, 2]) >[1, 2] : number[] if ({}) { } >{} : {} while ({}) { } >{} : {} do { }while({}) >{} : {} if ({ x: 1, y: 'a' }) { } >{ x: 1, y: 'a' } : { x: number; y: string; } >x : number >y : string while ({ x: 1, y: 'a' }) { } >{ x: 1, y: 'a' } : { x: number; y: string; } >x : number >y : string do { }while({ x: 1, y: 'a' }) >{ x: 1, y: 'a' } : { x: number; y: string; } >x : number >y : string if (() => 43) { } >() => 43 : () => number while (() => 43) { } >() => 43 : () => number do { }while(() => 43) >() => 43 : () => number if (new C()) { } >new C() : C >C : typeof C while (new C()) { } >new C() : C >C : typeof C do { }while(new C()) >new C() : C >C : typeof C if (new D()) { } >new D() : D >D : typeof D >C : C while (new D()) { } >new D() : D >D : typeof D >C : C do { }while(new D()) >new D() : D >D : typeof D >C : C // references var a = true; >a : boolean if (a) { } >a : boolean while (a) { } >a : boolean do { }while(a) >a : boolean var b = null; >b : any if (b) { } >b : any while (b) { } >b : any do { }while(b) >b : any var c = undefined; >c : any >undefined : undefined if (c) { } >c : any while (c) { } >c : any do { }while(c) >c : any var d = 0.0; >d : number if (d) { } >d : number while (d) { } >d : number do { }while(d) >d : number var e = 'a string'; >e : string if (e) { } >e : string while (e) { } >e : string do { }while(e) >e : string var f = ''; >f : string if (f) { } >f : string while (f) { } >f : string do { }while(f) >f : string var g = /[a-z]/ >g : RegExp if (g) { } >g : RegExp while (g) { } >g : RegExp do { }while(g) >g : RegExp var h = []; >h : any[] >[] : undefined[] if (h) { } >h : any[] while (h) { } >h : any[] do { }while(h) >h : any[] var i = [1, 2]; >i : number[] >[1, 2] : number[] if (i) { } >i : number[] while (i) { } >i : number[] do { }while(i) >i : number[] var j = {}; >j : {} >{} : {} if (j) { } >j : {} while (j) { } >j : {} do { }while(j) >j : {} var k = { x: 1, y: 'a' }; >k : { x: number; y: string; } >{ x: 1, y: 'a' } : { x: number; y: string; } >x : number >y : string if (k) { } >k : { x: number; y: string; } while (k) { } >k : { x: number; y: string; } do { }while(k) >k : { x: number; y: string; } function fn(x?: string): I { return null; } >fn : (x?: string) => I >x : string >I : I if (fn()) { } >fn() : I >fn : (x?: string) => I while (fn()) { } >fn() : I >fn : (x?: string) => I do { }while(fn()) >fn() : I >fn : (x?: string) => I if (fn) { } >fn : (x?: string) => I while (fn) { } >fn : (x?: string) => I do { }while(fn) >fn : (x?: string) => I