@@ -139,6 +139,10 @@ namespace ts {
139139 case SyntaxKind . IndexedAccessType :
140140 return visitNode ( cbNode , ( < IndexedAccessTypeNode > node ) . objectType ) ||
141141 visitNode ( cbNode , ( < IndexedAccessTypeNode > node ) . indexType ) ;
142+ case SyntaxKind . MappedType :
143+ return visitNode ( cbNode , ( < MappedTypeNode > node ) . iterationTypeName ) ||
144+ visitNode ( cbNode , ( < MappedTypeNode > node ) . indexType ) ||
145+ visitNode ( cbNode , ( < MappedTypeNode > node ) . type ) ;
142146 case SyntaxKind . LiteralType :
143147 return visitNode ( cbNode , ( < LiteralTypeNode > node ) . literal ) ;
144148 case SyntaxKind . ObjectBindingPattern :
@@ -2399,6 +2403,30 @@ namespace ts {
23992403 return members ;
24002404 }
24012405
2406+ function isStartOfMappedType ( ) {
2407+ nextToken ( ) ;
2408+ if ( token ( ) === SyntaxKind . ReadonlyKeyword ) {
2409+ nextToken ( ) ;
2410+ }
2411+ return token ( ) === SyntaxKind . OpenBracketToken && nextTokenIsIdentifier ( ) && nextToken ( ) === SyntaxKind . InKeyword ;
2412+ }
2413+
2414+ function parseMappedType ( ) {
2415+ const node = < MappedTypeNode > createNode ( SyntaxKind . MappedType ) ;
2416+ parseExpected ( SyntaxKind . OpenBraceToken ) ;
2417+ node . readonlyToken = parseOptionalToken ( SyntaxKind . ReadonlyKeyword ) ;
2418+ parseExpected ( SyntaxKind . OpenBracketToken ) ;
2419+ node . iterationTypeName = parseIdentifier ( ) ;
2420+ parseExpected ( SyntaxKind . InKeyword ) ;
2421+ node . indexType = parseType ( ) ;
2422+ parseExpected ( SyntaxKind . CloseBracketToken ) ;
2423+ node . questionToken = parseOptionalToken ( SyntaxKind . QuestionToken ) ;
2424+ node . type = parseTypeAnnotation ( ) ;
2425+ parseSemicolon ( ) ;
2426+ parseExpected ( SyntaxKind . CloseBraceToken ) ;
2427+ return finishNode ( node ) ;
2428+ }
2429+
24022430 function parseTupleType ( ) : TupleTypeNode {
24032431 const node = < TupleTypeNode > createNode ( SyntaxKind . TupleType ) ;
24042432 node . elementTypes = parseBracketedList ( ParsingContext . TupleElementTypes , parseType , SyntaxKind . OpenBracketToken , SyntaxKind . CloseBracketToken ) ;
@@ -2472,7 +2500,7 @@ namespace ts {
24722500 case SyntaxKind . TypeOfKeyword :
24732501 return parseTypeQuery ( ) ;
24742502 case SyntaxKind . OpenBraceToken :
2475- return parseTypeLiteral ( ) ;
2503+ return lookAhead ( isStartOfMappedType ) ? parseMappedType ( ) : parseTypeLiteral ( ) ;
24762504 case SyntaxKind . OpenBracketToken :
24772505 return parseTupleType ( ) ;
24782506 case SyntaxKind . OpenParenToken :
0 commit comments