@@ -3589,10 +3589,11 @@ namespace ts {
35893589 containingNodeKind === SyntaxKind . EnumDeclaration || // enum a { foo, |
35903590 isFunction ( containingNodeKind ) ||
35913591 containingNodeKind === SyntaxKind . ClassDeclaration || // class A<T, |
3592- containingNodeKind === SyntaxKind . FunctionDeclaration || // function A <T, |
3592+ containingNodeKind === SyntaxKind . ClassExpression || // var C = class D <T, |
35933593 containingNodeKind === SyntaxKind . InterfaceDeclaration || // interface A<T, |
3594- containingNodeKind === SyntaxKind . ArrayBindingPattern ; // var [x, y|
3595-
3594+ containingNodeKind === SyntaxKind . ArrayBindingPattern || // var [x, y|
3595+ containingNodeKind === SyntaxKind . TypeAliasDeclaration ; // type Map, K, |
3596+
35963597 case SyntaxKind . DotToken :
35973598 return containingNodeKind === SyntaxKind . ArrayBindingPattern ; // var [.|
35983599
@@ -3619,8 +3620,9 @@ namespace ts {
36193620
36203621 case SyntaxKind . LessThanToken :
36213622 return containingNodeKind === SyntaxKind . ClassDeclaration || // class A< |
3622- containingNodeKind === SyntaxKind . FunctionDeclaration || // function A < |
3623+ containingNodeKind === SyntaxKind . ClassExpression || // var C = class D < |
36233624 containingNodeKind === SyntaxKind . InterfaceDeclaration || // interface A< |
3625+ containingNodeKind === SyntaxKind . TypeAliasDeclaration || // type List< |
36243626 isFunction ( containingNodeKind ) ;
36253627
36263628 case SyntaxKind . StaticKeyword :
@@ -4181,6 +4183,7 @@ namespace ts {
41814183 displayParts . push ( keywordPart ( SyntaxKind . TypeKeyword ) ) ;
41824184 displayParts . push ( spacePart ( ) ) ;
41834185 addFullSymbolName ( symbol ) ;
4186+ writeTypeParametersOfSymbol ( symbol , sourceFile ) ;
41844187 displayParts . push ( spacePart ( ) ) ;
41854188 displayParts . push ( operatorPart ( SyntaxKind . EqualsToken ) ) ;
41864189 displayParts . push ( spacePart ( ) ) ;
@@ -4221,16 +4224,29 @@ namespace ts {
42214224 }
42224225 else {
42234226 // Method/function type parameter
4224- let signatureDeclaration = < SignatureDeclaration > getDeclarationOfKind ( symbol , SyntaxKind . TypeParameter ) . parent ;
4225- let signature = typeChecker . getSignatureFromDeclaration ( signatureDeclaration ) ;
4226- if ( signatureDeclaration . kind === SyntaxKind . ConstructSignature ) {
4227- displayParts . push ( keywordPart ( SyntaxKind . NewKeyword ) ) ;
4228- displayParts . push ( spacePart ( ) ) ;
4227+ let container = getContainingFunction ( location ) ;
4228+ if ( container ) {
4229+ let signatureDeclaration = < SignatureDeclaration > getDeclarationOfKind ( symbol , SyntaxKind . TypeParameter ) . parent ;
4230+ let signature = typeChecker . getSignatureFromDeclaration ( signatureDeclaration ) ;
4231+ if ( signatureDeclaration . kind === SyntaxKind . ConstructSignature ) {
4232+ displayParts . push ( keywordPart ( SyntaxKind . NewKeyword ) ) ;
4233+ displayParts . push ( spacePart ( ) ) ;
4234+ }
4235+ else if ( signatureDeclaration . kind !== SyntaxKind . CallSignature && signatureDeclaration . name ) {
4236+ addFullSymbolName ( signatureDeclaration . symbol ) ;
4237+ }
4238+ addRange ( displayParts , signatureToDisplayParts ( typeChecker , signature , sourceFile , TypeFormatFlags . WriteTypeArgumentsOfSignature ) ) ;
42294239 }
4230- else if ( signatureDeclaration . kind !== SyntaxKind . CallSignature && signatureDeclaration . name ) {
4231- addFullSymbolName ( signatureDeclaration . symbol ) ;
4240+ else {
4241+ // Type aliash type parameter
4242+ // For example
4243+ // type list<T> = T[]; // Both T will go through same code path
4244+ let declaration = < TypeAliasDeclaration > getDeclarationOfKind ( symbol , SyntaxKind . TypeParameter ) . parent ;
4245+ displayParts . push ( keywordPart ( SyntaxKind . TypeKeyword ) ) ;
4246+ displayParts . push ( spacePart ( ) ) ;
4247+ addFullSymbolName ( declaration . symbol ) ;
4248+ writeTypeParametersOfSymbol ( declaration . symbol , sourceFile ) ;
42324249 }
4233- addRange ( displayParts , signatureToDisplayParts ( typeChecker , signature , sourceFile , TypeFormatFlags . WriteTypeArgumentsOfSignature ) ) ;
42344250 }
42354251 }
42364252 if ( symbolFlags & SymbolFlags . EnumMember ) {
0 commit comments