@@ -179,7 +179,7 @@ namespace ts {
179
179
case SyntaxKind . ArrayType :
180
180
return visitNode ( cbNode , ( < ArrayTypeNode > node ) . elementType ) ;
181
181
case SyntaxKind . TupleType :
182
- return visitNodes ( cbNode , cbNodes , ( < TupleTypeNode > node ) . elementTypes ) ;
182
+ return visitNodes ( cbNode , cbNodes , ( < TupleTypeNode > node ) . elements ) ;
183
183
case SyntaxKind . UnionType :
184
184
case SyntaxKind . IntersectionType :
185
185
return visitNodes ( cbNode , cbNodes , ( < UnionOrIntersectionTypeNode > node ) . types ) ;
@@ -207,6 +207,11 @@ namespace ts {
207
207
visitNode ( cbNode , ( < MappedTypeNode > node ) . type ) ;
208
208
case SyntaxKind . LiteralType :
209
209
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 ) ;
210
215
case SyntaxKind . ObjectBindingPattern :
211
216
case SyntaxKind . ArrayBindingPattern :
212
217
return visitNodes ( cbNode , cbNodes , ( < BindingPattern > node ) . elements ) ;
@@ -3056,9 +3061,33 @@ namespace ts {
3056
3061
return type ;
3057
3062
}
3058
3063
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
+
3059
3088
function parseTupleType ( ) : TupleTypeNode {
3060
3089
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 ) ;
3062
3091
return finishNode ( node ) ;
3063
3092
}
3064
3093
0 commit comments