@@ -6136,10 +6136,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
6136
6136
serializeExistingTypeNode(context, typeNode, addUndefined) {
6137
6137
return serializeExistingTypeNode(context as NodeBuilderContext, typeNode, !!addUndefined);
6138
6138
},
6139
- serializeReturnTypeForSignature(syntacticContext, signatureDeclaration) {
6139
+ serializeReturnTypeForSignature(syntacticContext, signatureDeclaration, symbol ) {
6140
6140
const context = syntacticContext as NodeBuilderContext;
6141
6141
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);
6143
6144
return serializeInferredReturnTypeForSignature(context, signature, returnType);
6144
6145
},
6145
6146
serializeTypeOfExpression(syntacticContext, expr) {
@@ -6153,7 +6154,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
6153
6154
symbol ??= getSymbolOfDeclaration(declaration);
6154
6155
let type = context.enclosingSymbolTypes?.get(getSymbolId(symbol));
6155
6156
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))
6157
6159
? instantiateType(getWidenedLiteralType(getTypeOfSymbol(symbol)), context.mapper)
6158
6160
: errorType;
6159
6161
}
@@ -7386,12 +7388,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
7386
7388
if (propertySymbol.flags & SymbolFlags.Accessor) {
7387
7389
const writeType = getWriteTypeOfSymbol(propertySymbol);
7388
7390
if (propertyType !== writeType && !isErrorType(propertyType) && !isErrorType(writeType)) {
7391
+ const symbolMapper = getSymbolLinks(propertySymbol).mapper;
7389
7392
const getterDeclaration = getDeclarationOfKind<GetAccessorDeclaration>(propertySymbol, SyntaxKind.GetAccessor)!;
7390
7393
const getterSignature = getSignatureFromDeclaration(getterDeclaration);
7391
7394
typeElements.push(
7392
7395
setCommentRange(
7393
7396
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,
7395
7398
getterDeclaration,
7396
7399
),
7397
7400
);
@@ -7400,7 +7403,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
7400
7403
typeElements.push(
7401
7404
setCommentRange(
7402
7405
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,
7404
7407
setterDeclaration,
7405
7408
),
7406
7409
);
@@ -8665,6 +8668,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
8665
8668
const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration, context.enclosingDeclaration);
8666
8669
const decl = declaration ?? symbol.valueDeclaration ?? getDeclarationWithTypeAnnotation(symbol) ?? symbol.declarations?.[0];
8667
8670
if (decl) {
8671
+ const restore = addSymbolTypeToContext(context, symbol, type);
8668
8672
if (isAccessor(decl)) {
8669
8673
result = syntacticNodeBuilder.serializeTypeOfAccessor(decl, symbol, context);
8670
8674
}
@@ -8673,10 +8677,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
8673
8677
&& !nodeIsSynthesized(decl)
8674
8678
&& !(getObjectFlags(type) & ObjectFlags.RequiresWidening)
8675
8679
) {
8676
- const restore = addSymbolTypeToContext(context, symbol, type);
8677
8680
result = syntacticNodeBuilder.serializeTypeOfDeclaration(decl, symbol, context);
8678
- restore();
8679
8681
}
8682
+ restore();
8680
8683
}
8681
8684
if (!result) {
8682
8685
if (addUndefinedForParameter) {
0 commit comments