@@ -766,6 +766,15 @@ 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+ return null ;
775+ }
776+ }
777+
769778 /**
770779 * Returns a type string consisting of all the members of the given type.
771780 *
@@ -775,7 +784,7 @@ export class TypeTable {
775784 private makeStructuralTypeVector ( tag : string , type : ts . ObjectType ) : string | null {
776785 let hash = tag ;
777786 for ( let property of type . getProperties ( ) ) {
778- let propertyType = this . typeChecker . getTypeOfSymbolAtLocation ( property , this . arbitraryAstNode ) ;
787+ let propertyType = this . tryGetTypeOfSymbol ( property ) ;
779788 if ( propertyType == null ) return null ;
780789 let propertyTypeId = this . getId ( propertyType , false ) ;
781790 if ( propertyTypeId == null ) return null ;
@@ -882,7 +891,7 @@ export class TypeTable {
882891 let props = this . tryGetProperties ( type ) ;
883892 if ( props == null ) return ;
884893 for ( let symbol of props ) {
885- let propertyType = this . typeChecker . getTypeOfSymbolAtLocation ( symbol , this . arbitraryAstNode ) ;
894+ let propertyType = this . tryGetTypeOfSymbol ( symbol ) ;
886895 if ( propertyType == null ) continue ;
887896 let propertyTypeId = this . getId ( propertyType , false ) ;
888897 if ( propertyTypeId == null ) continue ;
@@ -938,7 +947,7 @@ export class TypeTable {
938947 }
939948 if ( parameters . length === 0 ) return null ;
940949 let restParameter = parameters [ parameters . length - 1 ] ;
941- let restParameterType = this . typeChecker . getTypeOfSymbolAtLocation ( restParameter , this . arbitraryAstNode ) ;
950+ let restParameterType = this . tryGetTypeOfSymbol ( restParameter ) ;
942951 if ( restParameterType == null ) return null ;
943952 let restParameterTypeId = this . getId ( restParameterType , false ) ;
944953 if ( restParameterTypeId == null ) return null ;
@@ -961,7 +970,7 @@ export class TypeTable {
961970 }
962971 for ( let paramIndex = 0 ; paramIndex < parameters . length ; ++ paramIndex ) {
963972 let parameter = parameters [ paramIndex ] ;
964- let parameterType = this . typeChecker . getTypeOfSymbolAtLocation ( parameter , this . arbitraryAstNode ) ;
973+ let parameterType = this . tryGetTypeOfSymbol ( parameter ) ;
965974 if ( parameterType == null ) {
966975 return null ;
967976 }
@@ -1178,7 +1187,7 @@ export class TypeTable {
11781187 stack . push ( id ) ;
11791188
11801189 for ( let symbol of type . getProperties ( ) ) {
1181- let propertyType : ts . Type = typeTable . typeChecker . getTypeOfSymbolAtLocation ( symbol , typeTable . arbitraryAstNode ) ;
1190+ let propertyType = this . tryGetTypeOfSymbol ( symbol ) ;
11821191 if ( propertyType == null ) continue ;
11831192 traverseType ( propertyType ) ;
11841193 }
@@ -1255,7 +1264,7 @@ export class TypeTable {
12551264 if ( objectFlags & ts . ObjectFlags . Anonymous ) {
12561265 // Anonymous interface type like `{ x: number }`.
12571266 for ( let symbol of type . getProperties ( ) ) {
1258- let propertyType = this . typeChecker . getTypeOfSymbolAtLocation ( symbol , this . arbitraryAstNode ) ;
1267+ let propertyType = this . tryGetTypeOfSymbol ( symbol ) ;
12591268 if ( propertyType == null ) continue ;
12601269 callback ( propertyType ) ;
12611270 }
@@ -1280,7 +1289,7 @@ export class TypeTable {
12801289 private forEachChildTypeOfSignature ( signature : ts . Signature , callback : ( type : ts . Type ) => void ) : void {
12811290 callback ( signature . getReturnType ( ) ) ;
12821291 for ( let parameter of signature . getParameters ( ) ) {
1283- let paramType = this . typeChecker . getTypeOfSymbolAtLocation ( parameter , this . arbitraryAstNode ) ;
1292+ let paramType = this . tryGetTypeOfSymbol ( parameter ) ;
12841293 if ( paramType == null ) continue ;
12851294 callback ( paramType ) ;
12861295 }
0 commit comments