diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index cfe27e7e7c3..8b44bdab60c 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1274,7 +1274,18 @@ module ts { var typeParameters = parseTypeParameters(); var parameters = parseParameterList(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken); checkParameterList(parameters); - var type = parseOptional(returnToken) ? parseType() : undefined; + + var type: TypeNode; + + if (returnToken === SyntaxKind.EqualsGreaterThanToken) { + parseExpected(returnToken); + type = parseType(); + } + else if (parseOptional(returnToken)) + { + type = parseType(); + } + return { typeParameters: typeParameters, parameters: parameters, diff --git a/tests/baselines/reference/functionTypesLackingReturnTypes.errors.txt b/tests/baselines/reference/functionTypesLackingReturnTypes.errors.txt new file mode 100644 index 00000000000..289f5d11d43 --- /dev/null +++ b/tests/baselines/reference/functionTypesLackingReturnTypes.errors.txt @@ -0,0 +1,18 @@ +==== tests/cases/compiler/functionTypesLackingReturnTypes.ts (2 errors) ==== + + // Error (no '=>') + function f(x: ()) { + ~ +!!! '=>' expected. + } + + // Error (no '=>') + var g: (param); + ~ +!!! '=>' expected. + + // Okay + var h: { () } + + // Okay + var i: { new () } \ No newline at end of file diff --git a/tests/cases/compiler/functionTypesLackingReturnTypes.ts b/tests/cases/compiler/functionTypesLackingReturnTypes.ts new file mode 100644 index 00000000000..f1dac471287 --- /dev/null +++ b/tests/cases/compiler/functionTypesLackingReturnTypes.ts @@ -0,0 +1,13 @@ + +// Error (no '=>') +function f(x: ()) { +} + +// Error (no '=>') +var g: (param); + +// Okay +var h: { () } + +// Okay +var i: { new () } \ No newline at end of file