diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cbda24e6a6e..09672f5c09c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13965,7 +13965,7 @@ namespace ts { } } } - else if (compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) { + else if (func.kind !== SyntaxKind.Constructor && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) { // The function has a return type, but the return statement doesn't have an expression. error(node, Diagnostics.Not_all_code_paths_return_a_value); } diff --git a/tests/baselines/reference/noImplicitReturnInConstructors.js b/tests/baselines/reference/noImplicitReturnInConstructors.js new file mode 100644 index 00000000000..f1c4c8caa60 --- /dev/null +++ b/tests/baselines/reference/noImplicitReturnInConstructors.js @@ -0,0 +1,14 @@ +//// [noImplicitReturnInConstructors.ts] +class C { + constructor() { + return; + } +} + +//// [noImplicitReturnInConstructors.js] +var C = (function () { + function C() { + return; + } + return C; +}()); diff --git a/tests/baselines/reference/noImplicitReturnInConstructors.symbols b/tests/baselines/reference/noImplicitReturnInConstructors.symbols new file mode 100644 index 00000000000..326a390ead8 --- /dev/null +++ b/tests/baselines/reference/noImplicitReturnInConstructors.symbols @@ -0,0 +1,8 @@ +=== tests/cases/compiler/noImplicitReturnInConstructors.ts === +class C { +>C : Symbol(C, Decl(noImplicitReturnInConstructors.ts, 0, 0)) + + constructor() { + return; + } +} diff --git a/tests/baselines/reference/noImplicitReturnInConstructors.types b/tests/baselines/reference/noImplicitReturnInConstructors.types new file mode 100644 index 00000000000..304c7b5db50 --- /dev/null +++ b/tests/baselines/reference/noImplicitReturnInConstructors.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/noImplicitReturnInConstructors.ts === +class C { +>C : C + + constructor() { + return; + } +} diff --git a/tests/cases/compiler/noImplicitReturnInConstructors.ts b/tests/cases/compiler/noImplicitReturnInConstructors.ts new file mode 100644 index 00000000000..ac6f5145318 --- /dev/null +++ b/tests/cases/compiler/noImplicitReturnInConstructors.ts @@ -0,0 +1,6 @@ +// @noImplicitReturns: true +class C { + constructor() { + return; + } +} \ No newline at end of file