@@ -2689,7 +2689,7 @@ namespace ts {
2689
2689
let symbolFromVariable: Symbol | undefined;
2690
2690
// First check if module was specified with "export=". If so, get the member from the resolved type
2691
2691
if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports.get(InternalSymbolName.ExportEquals)) {
2692
- symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name.escapedText);
2692
+ symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name.escapedText, /*skipObjectFunctionPropertyAugment*/ true );
2693
2693
}
2694
2694
else {
2695
2695
symbolFromVariable = getPropertyOfVariable(targetSymbol, name.escapedText);
@@ -11147,7 +11147,7 @@ namespace ts {
11147
11147
return getReducedType(getApparentType(getReducedType(type)));
11148
11148
}
11149
11149
11150
- function createUnionOrIntersectionProperty(containingType: UnionOrIntersectionType, name: __String): Symbol | undefined {
11150
+ function createUnionOrIntersectionProperty(containingType: UnionOrIntersectionType, name: __String, skipObjectFunctionPropertyAugment?: boolean ): Symbol | undefined {
11151
11151
let singleProp: Symbol | undefined;
11152
11152
let propSet: ESMap<SymbolId, Symbol> | undefined;
11153
11153
let indexTypes: Type[] | undefined;
@@ -11159,7 +11159,7 @@ namespace ts {
11159
11159
for (const current of containingType.types) {
11160
11160
const type = getApparentType(current);
11161
11161
if (!(type === errorType || type.flags & TypeFlags.Never)) {
11162
- const prop = getPropertyOfType(type, name);
11162
+ const prop = getPropertyOfType(type, name, skipObjectFunctionPropertyAugment );
11163
11163
const modifiers = prop ? getDeclarationModifierFlagsFromSymbol(prop) : 0;
11164
11164
if (prop) {
11165
11165
if (isUnion) {
@@ -11276,20 +11276,23 @@ namespace ts {
11276
11276
// constituents, in which case the isPartial flag is set when the containing type is union type. We need
11277
11277
// these partial properties when identifying discriminant properties, but otherwise they are filtered out
11278
11278
// and do not appear to be present in the union type.
11279
- function getUnionOrIntersectionProperty(type: UnionOrIntersectionType, name: __String): Symbol | undefined {
11280
- const properties = type.propertyCache || (type.propertyCache = createSymbolTable());
11281
- let property = properties. get(name);
11279
+ function getUnionOrIntersectionProperty(type: UnionOrIntersectionType, name: __String, skipObjectFunctionPropertyAugment?: boolean ): Symbol | undefined {
11280
+ let property = type.propertyCacheWithoutObjectFunctionPropertyAugment?.get(name) ||
11281
+ !skipObjectFunctionPropertyAugment ? type.propertyCache?. get(name) : undefined ;
11282
11282
if (!property) {
11283
- property = createUnionOrIntersectionProperty(type, name);
11283
+ property = createUnionOrIntersectionProperty(type, name, skipObjectFunctionPropertyAugment );
11284
11284
if (property) {
11285
+ const properties = skipObjectFunctionPropertyAugment ?
11286
+ type.propertyCacheWithoutObjectFunctionPropertyAugment ||= createSymbolTable() :
11287
+ type.propertyCache ||= createSymbolTable();
11285
11288
properties.set(name, property);
11286
11289
}
11287
11290
}
11288
11291
return property;
11289
11292
}
11290
11293
11291
- function getPropertyOfUnionOrIntersectionType(type: UnionOrIntersectionType, name: __String): Symbol | undefined {
11292
- const property = getUnionOrIntersectionProperty(type, name);
11294
+ function getPropertyOfUnionOrIntersectionType(type: UnionOrIntersectionType, name: __String, skipObjectFunctionPropertyAugment?: boolean ): Symbol | undefined {
11295
+ const property = getUnionOrIntersectionProperty(type, name, skipObjectFunctionPropertyAugment );
11293
11296
// We need to filter out partial properties in union types
11294
11297
return property && !(getCheckFlags(property) & CheckFlags.ReadPartial) ? property : undefined;
11295
11298
}
@@ -11367,14 +11370,15 @@ namespace ts {
11367
11370
* @param type a type to look up property from
11368
11371
* @param name a name of property to look up in a given type
11369
11372
*/
11370
- function getPropertyOfType(type: Type, name: __String): Symbol | undefined {
11373
+ function getPropertyOfType(type: Type, name: __String, skipObjectFunctionPropertyAugment?: boolean ): Symbol | undefined {
11371
11374
type = getReducedApparentType(type);
11372
11375
if (type.flags & TypeFlags.Object) {
11373
11376
const resolved = resolveStructuredTypeMembers(<ObjectType>type);
11374
11377
const symbol = resolved.members.get(name);
11375
11378
if (symbol && symbolIsValue(symbol)) {
11376
11379
return symbol;
11377
11380
}
11381
+ if (skipObjectFunctionPropertyAugment) return undefined;
11378
11382
const functionType = resolved === anyFunctionType ? globalFunctionType :
11379
11383
resolved.callSignatures.length ? globalCallableFunctionType :
11380
11384
resolved.constructSignatures.length ? globalNewableFunctionType :
@@ -11388,7 +11392,7 @@ namespace ts {
11388
11392
return getPropertyOfObjectType(globalObjectType, name);
11389
11393
}
11390
11394
if (type.flags & TypeFlags.UnionOrIntersection) {
11391
- return getPropertyOfUnionOrIntersectionType(<UnionOrIntersectionType>type, name);
11395
+ return getPropertyOfUnionOrIntersectionType(<UnionOrIntersectionType>type, name, skipObjectFunctionPropertyAugment );
11392
11396
}
11393
11397
return undefined;
11394
11398
}
0 commit comments