@@ -617,11 +617,22 @@ export default (superClass: Class<Parser>): Class<Parser> =>
617
617
return this . finishNode ( node , "TSTypeOperator" ) ;
618
618
}
619
619
620
+ tsParseInferType ( ) : N . TsInferType {
621
+ const node = this . startNode ( ) ;
622
+ this . expectContextual ( "infer" ) ;
623
+ const typeParameter = this . startNode ( ) ;
624
+ typeParameter . name = this . parseIdentifierName ( typeParameter . start ) ;
625
+ node . typeParameter = this . finishNode ( typeParameter , "TypeParameter" ) ;
626
+ return this . finishNode ( node , "TSInferType" ) ;
627
+ }
628
+
620
629
tsParseTypeOperatorOrHigher ( ) : N . TsType {
621
630
const operator = [ "keyof" , "unique" ] . find ( kw => this . isContextual ( kw ) ) ;
622
631
return operator
623
632
? this . tsParseTypeOperator ( operator )
624
- : this . tsParseArrayTypeOrHigher ( ) ;
633
+ : this . isContextual ( "infer" )
634
+ ? this . tsParseInferType ( )
635
+ : this . tsParseArrayTypeOrHigher ( ) ;
625
636
}
626
637
627
638
tsParseUnionOrIntersectionType (
@@ -774,6 +785,21 @@ export default (superClass: Class<Parser>): Class<Parser> =>
774
785
tsParseType ( ) : N . TsType {
775
786
// Need to set `state.inType` so that we don't parse JSX in a type context.
776
787
assert ( this . state . inType ) ;
788
+ const type = this . tsParseNonConditionalType ( ) ;
789
+ if ( this . hasPrecedingLineBreak ( ) || ! this . eat ( tt . _extends ) ) {
790
+ return type ;
791
+ }
792
+ const node : N . TsConditionalType = this . startNodeAtNode ( type ) ;
793
+ node . checkType = type ;
794
+ node . extendsType = this . tsParseNonConditionalType ( ) ;
795
+ this . expect ( tt . question ) ;
796
+ node . trueType = this . tsParseType ( ) ;
797
+ this . expect ( tt . colon ) ;
798
+ node . falseType = this . tsParseType ( ) ;
799
+ return this . finishNode ( node , "TSConditionalType" ) ;
800
+ }
801
+
802
+ tsParseNonConditionalType ( ) : N . TsType {
777
803
if ( this . tsIsStartOfFunctionType ( ) ) {
778
804
return this . tsParseFunctionOrConstructorType ( "TSFunctionType" ) ;
779
805
}
0 commit comments