@@ -118,6 +118,35 @@ func (c *Checker) GetExportsOfModule(symbol *ast.Symbol) []*ast.Symbol {
118118 return symbolsToArray (c .getExportsOfModule (symbol ))
119119}
120120
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+
121150func (c * Checker ) IsValidPropertyAccess (node * ast.Node , propertyName string ) bool {
122151 return c .isValidPropertyAccess (node , propertyName )
123152}
@@ -345,6 +374,13 @@ func runWithoutResolvedSignatureCaching[T any](c *Checker, node *ast.Node, fn fu
345374 return fn ()
346375}
347376
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+
348384func (c * Checker ) GetRootSymbols (symbol * ast.Symbol ) []* ast.Symbol {
349385 roots := c .getImmediateRootSymbols (symbol )
350386 if len (roots ) == 0 {
0 commit comments