Skip to content

Commit 52b209c

Browse files
committed
-
1 parent f9fb152 commit 52b209c

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

src/compiler/checker.ts

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12282,23 +12282,32 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1228212282
}
1228312283

1228412284
function getTypeOfSymbol(symbol: Symbol): Type {
12285+
// Retrieve the check flags for the given symbol
1228512286
const checkFlags = getCheckFlags(symbol);
1228612287

12287-
const typeResolvers: { flag: number; resolver: (sym: Symbol) => Type; }[] = [
12288-
{ flag: CheckFlags.DeferredType, resolver: getTypeOfSymbolWithDeferredType },
12289-
{ flag: CheckFlags.Instantiated, resolver: getTypeOfInstantiatedSymbol },
12290-
{ flag: CheckFlags.Mapped, resolver: sym => getTypeOfMappedSymbol(sym as MappedSymbol) },
12291-
{ flag: CheckFlags.ReverseMapped, resolver: sym => getTypeOfReverseMappedSymbol(sym as ReverseMappedSymbol) },
12292-
{ flag: SymbolFlags.Variable | SymbolFlags.Property, resolver: getTypeOfVariableOrParameterOrProperty },
12293-
{ flag: SymbolFlags.Function | SymbolFlags.Method | SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.ValueModule, resolver: getTypeOfFuncClassEnumModule },
12294-
{ flag: SymbolFlags.EnumMember, resolver: getTypeOfEnumMember },
12295-
{ flag: SymbolFlags.Accessor, resolver: getTypeOfAccessors },
12296-
{ flag: SymbolFlags.Alias, resolver: getTypeOfAlias },
12288+
// Define a mapping of flag checks to their respective type resolver functions
12289+
const typeResolvers: [number, (sym: Symbol) => Type][] = [
12290+
// Check for deferred type symbols
12291+
[CheckFlags.DeferredType, getTypeOfSymbolWithDeferredType], // Check for instantiated symbols
12292+
[CheckFlags.Instantiated, getTypeOfInstantiatedSymbol], // Check for mapped symbols (cast to MappedSymbol)
12293+
[CheckFlags.Mapped, sym => getTypeOfMappedSymbol(sym as MappedSymbol)], // Check for reverse-mapped symbols (cast to ReverseMappedSymbol)
12294+
[CheckFlags.ReverseMapped, sym => getTypeOfReverseMappedSymbol(sym as ReverseMappedSymbol)], // Check for variables and properties
12295+
[SymbolFlags.Variable | SymbolFlags.Property, getTypeOfVariableOrParameterOrProperty], // Check for functions, methods, classes, enums, and value modules
12296+
[SymbolFlags.Function | SymbolFlags.Method | SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.ValueModule, getTypeOfFuncClassEnumModule], // Check for enum members
12297+
[SymbolFlags.EnumMember, getTypeOfEnumMember], // Check for accessor symbols
12298+
[SymbolFlags.Accessor, getTypeOfAccessors], // Check for alias symbols
12299+
[SymbolFlags.Alias, getTypeOfAlias],
1229712300
];
1229812301

12299-
const matchedResolver = typeResolvers.find(({ flag }) => (checkFlags & flag) !== 0);
12302+
// Iterate through the mapping and return the corresponding type if a flag matches
12303+
for (const [flag, resolver] of typeResolvers) {
12304+
if ((checkFlags & flag)) {
12305+
return resolver(symbol);
12306+
}
12307+
}
1230012308

12301-
return matchedResolver ? matchedResolver.resolver(symbol) : errorType;
12309+
// Return the error type if no conditions match
12310+
return errorType;
1230212311
}
1230312312

1230412313
function getNonMissingTypeOfSymbol(symbol: Symbol) {

0 commit comments

Comments
 (0)