@@ -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 }
@@ -7386,12 +7388,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
73867388 if (propertySymbol.flags & SymbolFlags.Accessor) {
73877389 const writeType = getWriteTypeOfSymbol(propertySymbol);
73887390 if (propertyType !== writeType && !isErrorType(propertyType) && !isErrorType(writeType)) {
7391+ const symbolMapper = getSymbolLinks(propertySymbol).mapper;
73897392 const getterDeclaration = getDeclarationOfKind<GetAccessorDeclaration>(propertySymbol, SyntaxKind.GetAccessor)!;
73907393 const getterSignature = getSignatureFromDeclaration(getterDeclaration);
73917394 typeElements.push(
73927395 setCommentRange(
73937396 context,
7394- signatureToSignatureDeclarationHelper(getterSignature, SyntaxKind.GetAccessor, context, { name: propertyName }) as GetAccessorDeclaration,
7397+ signatureToSignatureDeclarationHelper(symbolMapper ? instantiateSignature(getterSignature, symbolMapper) : getterSignature, SyntaxKind.GetAccessor, context, { name: propertyName }) as GetAccessorDeclaration,
73957398 getterDeclaration,
73967399 ),
73977400 );
@@ -7400,7 +7403,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
74007403 typeElements.push(
74017404 setCommentRange(
74027405 context,
7403- signatureToSignatureDeclarationHelper(setterSignature, SyntaxKind.SetAccessor, context, { name: propertyName }) as SetAccessorDeclaration,
7406+ signatureToSignatureDeclarationHelper(symbolMapper ? instantiateSignature(setterSignature, symbolMapper) : setterSignature, SyntaxKind.SetAccessor, context, { name: propertyName }) as SetAccessorDeclaration,
74047407 setterDeclaration,
74057408 ),
74067409 );
@@ -8665,6 +8668,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
86658668 const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration, context.enclosingDeclaration);
86668669 const decl = declaration ?? symbol.valueDeclaration ?? getDeclarationWithTypeAnnotation(symbol) ?? symbol.declarations?.[0];
86678670 if (decl) {
8671+ const restore = addSymbolTypeToContext(context, symbol, type);
86688672 if (isAccessor(decl)) {
86698673 result = syntacticNodeBuilder.serializeTypeOfAccessor(decl, symbol, context);
86708674 }
@@ -8673,10 +8677,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
86738677 && !nodeIsSynthesized(decl)
86748678 && !(getObjectFlags(type) & ObjectFlags.RequiresWidening)
86758679 ) {
8676- const restore = addSymbolTypeToContext(context, symbol, type);
86778680 result = syntacticNodeBuilder.serializeTypeOfDeclaration(decl, symbol, context);
8678- restore();
86798681 }
8682+ restore();
86808683 }
86818684 if (!result) {
86828685 if (addUndefinedForParameter) {
0 commit comments