Skip to content

Commit 96e5bd2

Browse files
Fixed bug where function type literals may omit their '=>'.
1 parent 2ba3ae9 commit 96e5bd2

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

src/compiler/parser.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1274,7 +1274,18 @@ module ts {
12741274
var typeParameters = parseTypeParameters();
12751275
var parameters = parseParameterList(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken);
12761276
checkParameterList(parameters);
1277-
var type = parseOptional(returnToken) ? parseType() : undefined;
1277+
1278+
var type: TypeNode;
1279+
1280+
if (returnToken === SyntaxKind.EqualsGreaterThanToken) {
1281+
parseExpected(returnToken);
1282+
type = parseType();
1283+
}
1284+
else if (parseOptional(returnToken))
1285+
{
1286+
type = parseType();
1287+
}
1288+
12781289
return {
12791290
typeParameters: typeParameters,
12801291
parameters: parameters,
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
==== tests/cases/compiler/functionTypesLackingReturnTypes.ts (2 errors) ====
2+
3+
// Error (no '=>')
4+
function f(x: ()) {
5+
~
6+
!!! '=>' expected.
7+
}
8+
9+
// Error (no '=>')
10+
var g: (param);
11+
~
12+
!!! '=>' expected.
13+
14+
// Okay
15+
var h: { () }
16+
17+
// Okay
18+
var i: { new () }
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
2+
// Error (no '=>')
3+
function f(x: ()) {
4+
}
5+
6+
// Error (no '=>')
7+
var g: (param);
8+
9+
// Okay
10+
var h: { () }
11+
12+
// Okay
13+
var i: { new () }

0 commit comments

Comments
 (0)