@@ -766,6 +766,16 @@ export class TypeTable {
766766 return hash ;
767767 }
768768
769+ /** Returns the type of `symbol` or `null` if it could not be computed. */
770+ private tryGetTypeOfSymbol ( symbol : ts . Symbol ) {
771+ try {
772+ return this . typeChecker . getTypeOfSymbolAtLocation ( symbol , this . arbitraryAstNode )
773+ } catch ( e ) {
774+ console . warn ( `Could not compute type of '${ this . typeChecker . symbolToString ( symbol ) } '` ) ;
775+ return null ;
776+ }
777+ }
778+
769779 /**
770780 * Returns a type string consisting of all the members of the given type.
771781 *
@@ -775,7 +785,7 @@ export class TypeTable {
775785 private makeStructuralTypeVector ( tag : string , type : ts . ObjectType ) : string | null {
776786 let hash = tag ;
777787 for ( let property of type . getProperties ( ) ) {
778- let propertyType = this . typeChecker . getTypeOfSymbolAtLocation ( property , this . arbitraryAstNode ) ;
788+ let propertyType = this . tryGetTypeOfSymbol ( property ) ;
779789 if ( propertyType == null ) return null ;
780790 let propertyTypeId = this . getId ( propertyType , false ) ;
781791 if ( propertyTypeId == null ) return null ;
@@ -882,7 +892,7 @@ export class TypeTable {
882892 let props = this . tryGetProperties ( type ) ;
883893 if ( props == null ) return ;
884894 for ( let symbol of props ) {
885- let propertyType = this . typeChecker . getTypeOfSymbolAtLocation ( symbol , this . arbitraryAstNode ) ;
895+ let propertyType = this . tryGetTypeOfSymbol ( symbol ) ;
886896 if ( propertyType == null ) continue ;
887897 let propertyTypeId = this . getId ( propertyType , false ) ;
888898 if ( propertyTypeId == null ) continue ;
@@ -938,7 +948,7 @@ export class TypeTable {
938948 }
939949 if ( parameters . length === 0 ) return null ;
940950 let restParameter = parameters [ parameters . length - 1 ] ;
941- let restParameterType = this . typeChecker . getTypeOfSymbolAtLocation ( restParameter , this . arbitraryAstNode ) ;
951+ let restParameterType = this . tryGetTypeOfSymbol ( restParameter ) ;
942952 if ( restParameterType == null ) return null ;
943953 let restParameterTypeId = this . getId ( restParameterType , false ) ;
944954 if ( restParameterTypeId == null ) return null ;
@@ -961,7 +971,7 @@ export class TypeTable {
961971 }
962972 for ( let paramIndex = 0 ; paramIndex < parameters . length ; ++ paramIndex ) {
963973 let parameter = parameters [ paramIndex ] ;
964- let parameterType = this . typeChecker . getTypeOfSymbolAtLocation ( parameter , this . arbitraryAstNode ) ;
974+ let parameterType = this . tryGetTypeOfSymbol ( parameter ) ;
965975 if ( parameterType == null ) {
966976 return null ;
967977 }
@@ -1178,7 +1188,7 @@ export class TypeTable {
11781188 stack . push ( id ) ;
11791189
11801190 for ( let symbol of type . getProperties ( ) ) {
1181- let propertyType : ts . Type = typeTable . typeChecker . getTypeOfSymbolAtLocation ( symbol , typeTable . arbitraryAstNode ) ;
1191+ let propertyType = this . tryGetTypeOfSymbol ( symbol ) ;
11821192 if ( propertyType == null ) continue ;
11831193 traverseType ( propertyType ) ;
11841194 }
@@ -1255,7 +1265,7 @@ export class TypeTable {
12551265 if ( objectFlags & ts . ObjectFlags . Anonymous ) {
12561266 // Anonymous interface type like `{ x: number }`.
12571267 for ( let symbol of type . getProperties ( ) ) {
1258- let propertyType = this . typeChecker . getTypeOfSymbolAtLocation ( symbol , this . arbitraryAstNode ) ;
1268+ let propertyType = this . tryGetTypeOfSymbol ( symbol ) ;
12591269 if ( propertyType == null ) continue ;
12601270 callback ( propertyType ) ;
12611271 }
@@ -1280,7 +1290,7 @@ export class TypeTable {
12801290 private forEachChildTypeOfSignature ( signature : ts . Signature , callback : ( type : ts . Type ) => void ) : void {
12811291 callback ( signature . getReturnType ( ) ) ;
12821292 for ( let parameter of signature . getParameters ( ) ) {
1283- let paramType = this . typeChecker . getTypeOfSymbolAtLocation ( parameter , this . arbitraryAstNode ) ;
1293+ let paramType = this . tryGetTypeOfSymbol ( parameter ) ;
12841294 if ( paramType == null ) continue ;
12851295 callback ( paramType ) ;
12861296 }
0 commit comments