@@ -13197,10 +13197,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1319713197 else if (!member.symbol.isReplaceableByMethod) {
1319813198 symbol.declarations.push(member);
1319913199 }
13200- if (symbolFlags & SymbolFlags.Value) {
13201- if (!symbol.valueDeclaration || symbol.valueDeclaration.kind !== member.kind) {
13202- symbol.valueDeclaration = member;
13203- }
13200+ if (symbolFlags & SymbolFlags.Value && !symbol.valueDeclaration) {
13201+ symbol.valueDeclaration = member;
1320413202 }
1320513203 }
1320613204
@@ -13232,7 +13230,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1323213230 * @param lateSymbols The late-bound symbols of the parent.
1323313231 * @param decl The member to bind.
1323413232 */
13235- function lateBindMember(parent: Symbol, earlySymbols: SymbolTable | undefined, lateSymbols: Map<__String, TransientSymbol>, decl: LateBoundDeclaration | LateBoundBinaryExpressionDeclaration) {
13233+ function lateBindMember(parent: Symbol, earlySymbols: SymbolTable | undefined, lateSymbols: Map<__String, TransientSymbol>, decl: LateBoundDeclaration | LateBoundBinaryExpressionDeclaration, isFromAssignmentDeclarationMember = false ) {
1323613234 Debug.assert(!!decl.symbol, "The member is expected to have a symbol.");
1323713235 const links = getNodeLinks(decl);
1323813236 if (!links.resolvedSymbol) {
@@ -13247,10 +13245,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1324713245
1324813246 // Get or add a late-bound symbol for the member. This allows us to merge late-bound accessor declarations.
1324913247 let lateSymbol = lateSymbols.get(memberName);
13248+ if (isFromAssignmentDeclarationMember && lateSymbol) {
13249+ return links.resolvedSymbol = lateSymbol;
13250+ }
1325013251 if (!lateSymbol) lateSymbols.set(memberName, lateSymbol = createSymbol(SymbolFlags.None, memberName, CheckFlags.Late));
1325113252
1325213253 // Report an error if there's a symbol declaration with the same name and conflicting flags.
13253- const earlySymbol = earlySymbols && earlySymbols .get(memberName);
13254+ const earlySymbol = earlySymbols? .get(memberName);
1325413255 // Duplicate property declarations of classes are checked in checkClassForDuplicateDeclarations.
1325513256 if (!(parent.flags & SymbolFlags.Class) && lateSymbol.flags & getExcludedSymbolFlags(symbolFlags)) {
1325613257 // If we have an existing early-bound member, combine its declarations so that we can
@@ -13342,7 +13343,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1334213343 || assignmentKind === AssignmentDeclarationKind.Prototype; // A straight `Prototype` assignment probably can never have a computed name
1334313344 if (isStatic === !isInstanceMember) {
1334413345 if (hasLateBindableName(member)) {
13345- lateBindMember(symbol, earlySymbols, lateSymbols, member);
13346+ lateBindMember(symbol, earlySymbols, lateSymbols, member, /*isFromAssignmentDeclarationMember*/ true );
1334613347 }
1334713348 }
1334813349 }
0 commit comments