@@ -6136,10 +6136,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
61366136 serializeExistingTypeNode(context, typeNode, addUndefined) {
61376137 return serializeExistingTypeNode(context as NodeBuilderContext, typeNode, !!addUndefined);
61386138 },
6139- serializeReturnTypeForSignature(syntacticContext, signatureDeclaration) {
6139+ serializeReturnTypeForSignature(syntacticContext, signatureDeclaration, symbol ) {
61406140 const context = syntacticContext as NodeBuilderContext;
61416141 const signature = getSignatureFromDeclaration(signatureDeclaration);
6142- const returnType = context.enclosingSymbolTypes.get(getSymbolId(getSymbolOfDeclaration(signatureDeclaration))) ?? instantiateType(getReturnTypeOfSignature(signature), context.mapper);
6142+ symbol ??= getSymbolOfDeclaration(signatureDeclaration);
6143+ const returnType = context.enclosingSymbolTypes.get(getSymbolId(symbol)) ?? instantiateType(getReturnTypeOfSignature(signature), context.mapper);
61436144 return serializeInferredReturnTypeForSignature(context, signature, returnType);
61446145 },
61456146 serializeTypeOfExpression(syntacticContext, expr) {
@@ -6153,7 +6154,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
61536154 symbol ??= getSymbolOfDeclaration(declaration);
61546155 let type = context.enclosingSymbolTypes?.get(getSymbolId(symbol));
61556156 if (type === undefined) {
6156- type = symbol && !(symbol.flags & (SymbolFlags.TypeLiteral | SymbolFlags.Signature))
6157+ type = symbol.flags & SymbolFlags.Accessor && declaration.kind === SyntaxKind.SetAccessor ? instantiateType(getWriteTypeOfSymbol(symbol), context.mapper) :
6158+ symbol && !(symbol.flags & (SymbolFlags.TypeLiteral | SymbolFlags.Signature))
61576159 ? instantiateType(getWidenedLiteralType(getTypeOfSymbol(symbol)), context.mapper)
61586160 : errorType;
61596161 }
@@ -7383,12 +7385,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
73837385 if (propertySymbol.flags & SymbolFlags.Accessor) {
73847386 const writeType = getWriteTypeOfSymbol(propertySymbol);
73857387 if (propertyType !== writeType && !isErrorType(propertyType) && !isErrorType(writeType)) {
7388+ const symbolMapper = getSymbolLinks(propertySymbol).mapper;
73867389 const getterDeclaration = getDeclarationOfKind<GetAccessorDeclaration>(propertySymbol, SyntaxKind.GetAccessor)!;
73877390 const getterSignature = getSignatureFromDeclaration(getterDeclaration);
73887391 typeElements.push(
73897392 setCommentRange(
73907393 context,
7391- signatureToSignatureDeclarationHelper(getterSignature, SyntaxKind.GetAccessor, context, { name: propertyName }) as GetAccessorDeclaration,
7394+ signatureToSignatureDeclarationHelper(symbolMapper ? instantiateSignature(getterSignature, symbolMapper) : getterSignature, SyntaxKind.GetAccessor, context, { name: propertyName }) as GetAccessorDeclaration,
73927395 getterDeclaration,
73937396 ),
73947397 );
@@ -7397,7 +7400,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
73977400 typeElements.push(
73987401 setCommentRange(
73997402 context,
7400- signatureToSignatureDeclarationHelper(setterSignature, SyntaxKind.SetAccessor, context, { name: propertyName }) as SetAccessorDeclaration,
7403+ signatureToSignatureDeclarationHelper(symbolMapper ? instantiateSignature(setterSignature, symbolMapper) : setterSignature, SyntaxKind.SetAccessor, context, { name: propertyName }) as SetAccessorDeclaration,
74017404 setterDeclaration,
74027405 ),
74037406 );
@@ -8662,6 +8665,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
86628665 const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration, context.enclosingDeclaration);
86638666 const decl = declaration ?? symbol.valueDeclaration ?? getDeclarationWithTypeAnnotation(symbol) ?? symbol.declarations?.[0];
86648667 if (decl) {
8668+ const restore = addSymbolTypeToContext(context, symbol, type);
86658669 if (isAccessor(decl)) {
86668670 result = syntacticNodeBuilder.serializeTypeOfAccessor(decl, symbol, context);
86678671 }
@@ -8670,10 +8674,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
86708674 && !nodeIsSynthesized(decl)
86718675 && !(getObjectFlags(type) & ObjectFlags.RequiresWidening)
86728676 ) {
8673- const restore = addSymbolTypeToContext(context, symbol, type);
86748677 result = syntacticNodeBuilder.serializeTypeOfDeclaration(decl, symbol, context);
8675- restore();
86768678 }
8679+ restore();
86778680 }
86788681 if (!result) {
86798682 if (addUndefinedForParameter) {
0 commit comments