@@ -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
}
@@ -7383,12 +7385,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
7383
7385
if (propertySymbol.flags & SymbolFlags.Accessor) {
7384
7386
const writeType = getWriteTypeOfSymbol(propertySymbol);
7385
7387
if (propertyType !== writeType && !isErrorType(propertyType) && !isErrorType(writeType)) {
7388
+ const symbolMapper = getSymbolLinks(propertySymbol).mapper;
7386
7389
const getterDeclaration = getDeclarationOfKind<GetAccessorDeclaration>(propertySymbol, SyntaxKind.GetAccessor)!;
7387
7390
const getterSignature = getSignatureFromDeclaration(getterDeclaration);
7388
7391
typeElements.push(
7389
7392
setCommentRange(
7390
7393
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,
7392
7395
getterDeclaration,
7393
7396
),
7394
7397
);
@@ -7397,7 +7400,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
7397
7400
typeElements.push(
7398
7401
setCommentRange(
7399
7402
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,
7401
7404
setterDeclaration,
7402
7405
),
7403
7406
);
@@ -8662,6 +8665,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
8662
8665
const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration, context.enclosingDeclaration);
8663
8666
const decl = declaration ?? symbol.valueDeclaration ?? getDeclarationWithTypeAnnotation(symbol) ?? symbol.declarations?.[0];
8664
8667
if (decl) {
8668
+ const restore = addSymbolTypeToContext(context, symbol, type);
8665
8669
if (isAccessor(decl)) {
8666
8670
result = syntacticNodeBuilder.serializeTypeOfAccessor(decl, symbol, context);
8667
8671
}
@@ -8670,10 +8674,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
8670
8674
&& !nodeIsSynthesized(decl)
8671
8675
&& !(getObjectFlags(type) & ObjectFlags.RequiresWidening)
8672
8676
) {
8673
- const restore = addSymbolTypeToContext(context, symbol, type);
8674
8677
result = syntacticNodeBuilder.serializeTypeOfDeclaration(decl, symbol, context);
8675
- restore();
8676
8678
}
8679
+ restore();
8677
8680
}
8678
8681
if (!result) {
8679
8682
if (addUndefinedForParameter) {
0 commit comments