@@ -118,6 +118,35 @@ func (c *Checker) GetExportsOfModule(symbol *ast.Symbol) []*ast.Symbol {
118
118
return symbolsToArray (c .getExportsOfModule (symbol ))
119
119
}
120
120
121
+ func (c * Checker ) ForEachExportAndPropertyOfModule (moduleSymbol * ast.Symbol , cb func (* ast.Symbol , string )) {
122
+ for key , exportedSymbol := range c .getExportsOfModule (moduleSymbol ) {
123
+ if ! isReservedMemberName (key ) {
124
+ cb (exportedSymbol , key )
125
+ }
126
+ }
127
+
128
+ exportEquals := c .resolveExternalModuleSymbol (moduleSymbol , false /*dontResolveAlias*/ )
129
+ if exportEquals == moduleSymbol {
130
+ return
131
+ }
132
+
133
+ typeOfSymbol := c .getTypeOfSymbol (exportEquals )
134
+ if ! c .shouldTreatPropertiesOfExternalModuleAsExports (typeOfSymbol ) {
135
+ return
136
+ }
137
+
138
+ // forEachPropertyOfType
139
+ reducedType := c .getReducedApparentType (typeOfSymbol )
140
+ if reducedType .flags & TypeFlagsStructuredType == 0 {
141
+ return
142
+ }
143
+ for name , symbol := range c .resolveStructuredTypeMembers (reducedType ).members {
144
+ if c .isNamedMember (symbol , name ) {
145
+ cb (symbol , name )
146
+ }
147
+ }
148
+ }
149
+
121
150
func (c * Checker ) IsValidPropertyAccess (node * ast.Node , propertyName string ) bool {
122
151
return c .isValidPropertyAccess (node , propertyName )
123
152
}
@@ -345,6 +374,13 @@ func runWithoutResolvedSignatureCaching[T any](c *Checker, node *ast.Node, fn fu
345
374
return fn ()
346
375
}
347
376
377
+ func (c * Checker ) SkipAlias (symbol * ast.Symbol ) * ast.Symbol {
378
+ if symbol .Flags & ast .SymbolFlagsAlias != 0 {
379
+ return c .GetAliasedSymbol (symbol )
380
+ }
381
+ return symbol
382
+ }
383
+
348
384
func (c * Checker ) GetRootSymbols (symbol * ast.Symbol ) []* ast.Symbol {
349
385
roots := c .getImmediateRootSymbols (symbol )
350
386
if len (roots ) == 0 {
0 commit comments