@@ -2740,49 +2740,50 @@ namespace ts {
2740
2740
}
2741
2741
2742
2742
function parsePostfixTypeOrHigher ( ) : TypeNode {
2743
- let kind : SyntaxKind | undefined ;
2744
2743
let type = parseNonArrayType ( ) ;
2745
- while ( ! scanner . hasPrecedingLineBreak ( ) && ( kind = getPostfixSyntaxKind ( token ( ) ) ) ) {
2746
- if ( kind === SyntaxKind . OpenBracketToken ) {
2747
- parseExpected ( SyntaxKind . OpenBracketToken ) ;
2748
- if ( isStartOfType ( ) ) {
2749
- const node = createNode ( SyntaxKind . IndexedAccessType , type . pos ) as IndexedAccessTypeNode ;
2750
- node . objectType = type ;
2751
- node . indexType = parseType ( ) ;
2752
- parseExpected ( SyntaxKind . CloseBracketToken ) ;
2753
- type = finishNode ( node ) ;
2754
- }
2755
- else {
2756
- const node = createNode ( SyntaxKind . ArrayType , type . pos ) as ArrayTypeNode ;
2757
- node . elementType = type ;
2758
- parseExpected ( SyntaxKind . CloseBracketToken ) ;
2759
- type = finishNode ( node ) ;
2760
- }
2761
- }
2762
- else {
2763
- nextToken ( ) ;
2764
- const postfix = createNode ( kind , type . pos ) as JSDocOptionalType | JSDocNonNullableType | JSDocNullableType ;
2765
- postfix . type = type ;
2766
- type = finishNode ( postfix ) ;
2744
+ while ( ! scanner . hasPrecedingLineBreak ( ) ) {
2745
+ switch ( token ( ) ) {
2746
+ case SyntaxKind . EqualsToken :
2747
+ // only parse postfix = inside jsdoc, because it's ambiguous elsewhere
2748
+ if ( ! ( contextFlags & NodeFlags . JSDoc ) ) {
2749
+ return type ;
2750
+ }
2751
+ type = createJSDocPostfixType ( SyntaxKind . JSDocOptionalType , type ) ;
2752
+ break ;
2753
+ case SyntaxKind . ExclamationToken :
2754
+ type = createJSDocPostfixType ( SyntaxKind . JSDocNonNullableType , type ) ;
2755
+ break ;
2756
+ case SyntaxKind . QuestionToken :
2757
+ type = createJSDocPostfixType ( SyntaxKind . JSDocNullableType , type ) ;
2758
+ break ;
2759
+ case SyntaxKind . OpenBracketToken :
2760
+ parseExpected ( SyntaxKind . OpenBracketToken ) ;
2761
+ if ( isStartOfType ( ) ) {
2762
+ const node = createNode ( SyntaxKind . IndexedAccessType , type . pos ) as IndexedAccessTypeNode ;
2763
+ node . objectType = type ;
2764
+ node . indexType = parseType ( ) ;
2765
+ parseExpected ( SyntaxKind . CloseBracketToken ) ;
2766
+ type = finishNode ( node ) ;
2767
+ }
2768
+ else {
2769
+ const node = createNode ( SyntaxKind . ArrayType , type . pos ) as ArrayTypeNode ;
2770
+ node . elementType = type ;
2771
+ parseExpected ( SyntaxKind . CloseBracketToken ) ;
2772
+ type = finishNode ( node ) ;
2773
+ }
2774
+ break ;
2775
+ default :
2776
+ return type ;
2767
2777
}
2768
2778
}
2769
2779
return type ;
2770
2780
}
2771
2781
2772
- function getPostfixSyntaxKind ( tokenKind : SyntaxKind ) : SyntaxKind {
2773
- switch ( tokenKind ) {
2774
- case SyntaxKind . EqualsToken :
2775
- // only parse postfix = inside jsdoc, because it's ambiguous elsewhere
2776
- return contextFlags & NodeFlags . JSDoc ? SyntaxKind . JSDocOptionalType : 0 ;
2777
- case SyntaxKind . ExclamationToken :
2778
- return SyntaxKind . JSDocNonNullableType ;
2779
- case SyntaxKind . QuestionToken :
2780
- return SyntaxKind . JSDocNullableType ;
2781
- case SyntaxKind . OpenBracketToken :
2782
- return SyntaxKind . OpenBracketToken ;
2783
- default :
2784
- return 0 ;
2785
- }
2782
+ function createJSDocPostfixType ( kind : SyntaxKind , type : TypeNode ) {
2783
+ nextToken ( ) ;
2784
+ const postfix = createNode ( kind , type . pos ) as JSDocOptionalType | JSDocNonNullableType | JSDocNullableType ;
2785
+ postfix . type = type ;
2786
+ return finishNode ( postfix ) ;
2786
2787
}
2787
2788
2788
2789
function parseTypeOperator ( operator : SyntaxKind . KeyOfKeyword ) {
0 commit comments