@@ -578,11 +578,26 @@ export class Parser extends DiagnosticEmitter {
578578 // '[' Type (',' Type)* ']'
579579 } else if ( token == Token . OpenBracket ) {
580580 let elements : TypeNode [ ] = [ ] ;
581+ let elementNames : ( IdentifierExpression | null ) [ ] = [ ] ;
582+ let hasElementNames = false ;
581583 if ( ! tn . skip ( Token . CloseBracket ) ) {
582584 do {
585+ let elementName : IdentifierExpression | null = null ;
586+ let state = tn . mark ( ) ;
587+ if ( tn . skip ( Token . Identifier ) ) {
588+ let name = tn . readIdentifier ( ) ;
589+ let nameRange = tn . range ( ) ;
590+ if ( tn . skip ( Token . Colon ) ) {
591+ elementName = Node . createIdentifierExpression ( name , nameRange ) ;
592+ hasElementNames = true ;
593+ } else {
594+ tn . reset ( state ) ;
595+ }
596+ }
583597 let element = this . parseType ( tn , true , suppressErrors ) ;
584598 if ( ! element ) return null ;
585599 elements . push ( element ) ;
600+ elementNames . push ( elementName ) ;
586601 } while ( tn . skip ( Token . Comma ) ) ;
587602 if ( ! tn . skip ( Token . CloseBracket ) ) {
588603 if ( ! suppressErrors ) {
@@ -594,7 +609,7 @@ export class Parser extends DiagnosticEmitter {
594609 return null ;
595610 }
596611 }
597- type = Node . createTupleType ( elements , false , tn . range ( startPos , tn . pos ) ) ;
612+ type = Node . createTupleType ( elements , hasElementNames ? elementNames : null , false , tn . range ( startPos , tn . pos ) ) ;
598613
599614 // 'void'
600615 } else if ( token == Token . Void ) {
0 commit comments