@@ -179,7 +179,7 @@ namespace ts {
179179 case SyntaxKind . ArrayType :
180180 return visitNode ( cbNode , ( < ArrayTypeNode > node ) . elementType ) ;
181181 case SyntaxKind . TupleType :
182- return visitNodes ( cbNode , cbNodes , ( < TupleTypeNode > node ) . elementTypes ) ;
182+ return visitNodes ( cbNode , cbNodes , ( < TupleTypeNode > node ) . elements ) ;
183183 case SyntaxKind . UnionType :
184184 case SyntaxKind . IntersectionType :
185185 return visitNodes ( cbNode , cbNodes , ( < UnionOrIntersectionTypeNode > node ) . types ) ;
@@ -207,6 +207,11 @@ namespace ts {
207207 visitNode ( cbNode , ( < MappedTypeNode > node ) . type ) ;
208208 case SyntaxKind . LiteralType :
209209 return visitNode ( cbNode , ( < LiteralTypeNode > node ) . literal ) ;
210+ case SyntaxKind . NamedTupleMember :
211+ return visitNode ( cbNode , ( < NamedTupleMember > node ) . dotDotDotToken ) ||
212+ visitNode ( cbNode , ( < NamedTupleMember > node ) . name ) ||
213+ visitNode ( cbNode , ( < NamedTupleMember > node ) . questionToken ) ||
214+ visitNode ( cbNode , ( < NamedTupleMember > node ) . type ) ;
210215 case SyntaxKind . ObjectBindingPattern :
211216 case SyntaxKind . ArrayBindingPattern :
212217 return visitNodes ( cbNode , cbNodes , ( < BindingPattern > node ) . elements ) ;
@@ -3056,9 +3061,33 @@ namespace ts {
30563061 return type ;
30573062 }
30583063
3064+ function isNextTokenColonOrQuestionColon ( ) {
3065+ return nextToken ( ) === SyntaxKind . ColonToken || ( token ( ) === SyntaxKind . QuestionToken && nextToken ( ) === SyntaxKind . ColonToken ) ;
3066+ }
3067+
3068+ function isTupleElementName ( ) {
3069+ if ( token ( ) === SyntaxKind . DotDotDotToken ) {
3070+ return tokenIsIdentifierOrKeyword ( nextToken ( ) ) && isNextTokenColonOrQuestionColon ( ) ;
3071+ }
3072+ return tokenIsIdentifierOrKeyword ( token ( ) ) && isNextTokenColonOrQuestionColon ( ) ;
3073+ }
3074+
3075+ function parseTupleElementNameOrTupleElementType ( ) {
3076+ if ( lookAhead ( isTupleElementName ) ) {
3077+ const node = < NamedTupleMember > createNode ( SyntaxKind . NamedTupleMember ) ;
3078+ node . dotDotDotToken = parseOptionalToken ( SyntaxKind . DotDotDotToken ) ;
3079+ node . name = parseIdentifierName ( ) ;
3080+ node . questionToken = parseOptionalToken ( SyntaxKind . QuestionToken ) ;
3081+ parseExpected ( SyntaxKind . ColonToken ) ;
3082+ node . type = parseTupleElementType ( ) ;
3083+ return addJSDocComment ( finishNode ( node ) ) ;
3084+ }
3085+ return parseTupleElementType ( ) ;
3086+ }
3087+
30593088 function parseTupleType ( ) : TupleTypeNode {
30603089 const node = < TupleTypeNode > createNode ( SyntaxKind . TupleType ) ;
3061- node . elementTypes = parseBracketedList ( ParsingContext . TupleElementTypes , parseTupleElementType , SyntaxKind . OpenBracketToken , SyntaxKind . CloseBracketToken ) ;
3090+ node . elements = parseBracketedList ( ParsingContext . TupleElementTypes , parseTupleElementNameOrTupleElementType , SyntaxKind . OpenBracketToken , SyntaxKind . CloseBracketToken ) ;
30623091 return finishNode ( node ) ;
30633092 }
30643093
0 commit comments