@@ -6543,6 +6543,11 @@ module ts {
6543
6543
return mapToArray ( symbols ) ;
6544
6544
}
6545
6545
6546
+ // True if the given identifier, string literal, or number literal is the name of a declaration node
6547
+ function isTypeDeclarationName ( name : Node ) : boolean {
6548
+ return name . kind == SyntaxKind . Identifier && isTypeDeclaration ( name . parent ) ;
6549
+ }
6550
+
6546
6551
// True if the given identifier, string literal, or number literal is the name of a declaration node
6547
6552
function isDeclarationName ( name : Node ) : boolean {
6548
6553
if ( name . kind !== SyntaxKind . Identifier && name . kind !== SyntaxKind . StringLiteral && name . kind !== SyntaxKind . NumericLiteral ) {
@@ -6561,6 +6566,16 @@ module ts {
6561
6566
return false ;
6562
6567
}
6563
6568
6569
+ function isTypeDeclaration ( node : Node ) : boolean {
6570
+ switch ( node . kind ) {
6571
+ case SyntaxKind . TypeParameter :
6572
+ case SyntaxKind . ClassDeclaration :
6573
+ case SyntaxKind . InterfaceDeclaration :
6574
+ case SyntaxKind . EnumDeclaration :
6575
+ return true ;
6576
+ }
6577
+ }
6578
+
6564
6579
function isDeclaration ( node : Node ) : boolean {
6565
6580
switch ( node . kind ) {
6566
6581
case SyntaxKind . TypeParameter :
@@ -6817,17 +6832,35 @@ module ts {
6817
6832
return getTypeFromTypeNode ( < TypeNode > node ) ;
6818
6833
}
6819
6834
6835
+ if ( isTypeDeclaration ( node ) ) {
6836
+ // In this case, we call getSymbolOfNode instead of getSymbolInfo because it is a declaration
6837
+ var symbol = getSymbolOfNode ( node ) ;
6838
+ return getDeclaredTypeOfSymbol ( symbol ) ;
6839
+ }
6840
+
6841
+ if ( isTypeDeclarationName ( node ) ) {
6842
+ var symbol = getSymbolInfo ( node ) ;
6843
+ return getDeclaredTypeOfSymbol ( symbol ) ;
6844
+ }
6845
+
6820
6846
if ( isDeclaration ( node ) ) {
6821
6847
// In this case, we call getSymbolOfNode instead of getSymbolInfo because it is a declaration
6822
6848
var symbol = getSymbolOfNode ( node ) ;
6823
6849
return getTypeOfSymbol ( symbol ) ;
6824
6850
}
6825
6851
6826
- var isExportAssignment = node . kind === SyntaxKind . Identifier && node . parent . kind === SyntaxKind . ExportAssignment ;
6827
- if ( isDeclarationName ( node ) || isExportAssignment ) {
6852
+ if ( isDeclarationName ( node ) ) {
6828
6853
var symbol = getSymbolInfo ( node ) ;
6829
6854
return getTypeOfSymbol ( symbol ) ;
6830
6855
}
6856
+
6857
+ if ( node . kind === SyntaxKind . Identifier && node . parent . kind === SyntaxKind . ExportAssignment ) {
6858
+ var symbol = getSymbolInfo ( node ) ;
6859
+ var declaredType = getDeclaredTypeOfSymbol ( symbol ) ;
6860
+ return declaredType !== unknownType ? declaredType : getTypeOfSymbol ( symbol ) ;
6861
+ }
6862
+
6863
+ Debug . fail ( "Unhandled case in getTypeOfNode" ) ;
6831
6864
}
6832
6865
6833
6866
function getTypeOfExpression ( expr : Expression ) : Type {
0 commit comments