=== tests/cases/conformance/statements/returnStatements/returnStatements.ts === // all the following should be valid function fn1(): number { return 1; } >fn1 : () => number, Symbol(fn1, Decl(returnStatements.ts, 0, 0)) >1 : number function fn2(): string { return ''; } >fn2 : () => string, Symbol(fn2, Decl(returnStatements.ts, 1, 36)) >'' : string function fn3(): void { return undefined; } >fn3 : () => void, Symbol(fn3, Decl(returnStatements.ts, 2, 37)) >undefined : undefined, Symbol(undefined) function fn4(): void { return; } >fn4 : () => void, Symbol(fn4, Decl(returnStatements.ts, 3, 42)) function fn5(): boolean { return true; } >fn5 : () => boolean, Symbol(fn5, Decl(returnStatements.ts, 4, 32)) >true : boolean function fn6(): Date { return new Date(12); } >fn6 : () => Date, Symbol(fn6, Decl(returnStatements.ts, 5, 40)) >Date : Date, Symbol(Date, Decl(lib.d.ts, 633, 23), Decl(lib.d.ts, 815, 11)) >new Date(12) : Date >Date : DateConstructor, Symbol(Date, Decl(lib.d.ts, 633, 23), Decl(lib.d.ts, 815, 11)) >12 : number function fn7(): any { return null; } >fn7 : () => any, Symbol(fn7, Decl(returnStatements.ts, 6, 45)) >null : null function fn8(): any { return; } // OK, eq. to 'return undefined' >fn8 : () => any, Symbol(fn8, Decl(returnStatements.ts, 7, 36)) interface I { id: number } >I : I, Symbol(I, Decl(returnStatements.ts, 8, 31)) >id : number, Symbol(id, Decl(returnStatements.ts, 10, 13)) class C implements I { >C : C, Symbol(C, Decl(returnStatements.ts, 10, 26)) >I : I, Symbol(I, Decl(returnStatements.ts, 8, 31)) id: number; >id : number, Symbol(id, Decl(returnStatements.ts, 11, 22)) dispose() {} >dispose : () => void, Symbol(dispose, Decl(returnStatements.ts, 12, 15)) } class D extends C { >D : D, Symbol(D, Decl(returnStatements.ts, 14, 1)) >C : C, Symbol(C, Decl(returnStatements.ts, 10, 26)) name: string; >name : string, Symbol(name, Decl(returnStatements.ts, 15, 19)) } function fn10(): I { return { id: 12 }; } >fn10 : () => I, Symbol(fn10, Decl(returnStatements.ts, 17, 1)) >I : I, Symbol(I, Decl(returnStatements.ts, 8, 31)) >{ id: 12 } : { id: number; } >id : number, Symbol(id, Decl(returnStatements.ts, 18, 29)) >12 : number function fn11(): I { return new C(); } >fn11 : () => I, Symbol(fn11, Decl(returnStatements.ts, 18, 41)) >I : I, Symbol(I, Decl(returnStatements.ts, 8, 31)) >new C() : C >C : typeof C, Symbol(C, Decl(returnStatements.ts, 10, 26)) function fn12(): C { return new D(); } >fn12 : () => C, Symbol(fn12, Decl(returnStatements.ts, 20, 38)) >C : C, Symbol(C, Decl(returnStatements.ts, 10, 26)) >new D() : D >D : typeof D, Symbol(D, Decl(returnStatements.ts, 14, 1)) function fn13(): C { return null; } >fn13 : () => C, Symbol(fn13, Decl(returnStatements.ts, 21, 38)) >C : C, Symbol(C, Decl(returnStatements.ts, 10, 26)) >null : null