mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-15 03:09:59 -05:00
Co-authored-by: Titian Cernicova-Dragomir <tcernicovad1@bloomberg.net>
This commit is contained in:
@@ -6136,10 +6136,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
serializeExistingTypeNode(context, typeNode, addUndefined) {
|
||||
return serializeExistingTypeNode(context as NodeBuilderContext, typeNode, !!addUndefined);
|
||||
},
|
||||
serializeReturnTypeForSignature(syntacticContext, signatureDeclaration) {
|
||||
serializeReturnTypeForSignature(syntacticContext, signatureDeclaration, symbol) {
|
||||
const context = syntacticContext as NodeBuilderContext;
|
||||
const signature = getSignatureFromDeclaration(signatureDeclaration);
|
||||
const returnType = context.enclosingSymbolTypes.get(getSymbolId(getSymbolOfDeclaration(signatureDeclaration))) ?? instantiateType(getReturnTypeOfSignature(signature), context.mapper);
|
||||
symbol ??= getSymbolOfDeclaration(signatureDeclaration);
|
||||
const returnType = context.enclosingSymbolTypes.get(getSymbolId(symbol)) ?? instantiateType(getReturnTypeOfSignature(signature), context.mapper);
|
||||
return serializeInferredReturnTypeForSignature(context, signature, returnType);
|
||||
},
|
||||
serializeTypeOfExpression(syntacticContext, expr) {
|
||||
@@ -6153,7 +6154,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
symbol ??= getSymbolOfDeclaration(declaration);
|
||||
let type = context.enclosingSymbolTypes?.get(getSymbolId(symbol));
|
||||
if (type === undefined) {
|
||||
type = symbol && !(symbol.flags & (SymbolFlags.TypeLiteral | SymbolFlags.Signature))
|
||||
type = symbol.flags & SymbolFlags.Accessor && declaration.kind === SyntaxKind.SetAccessor ? instantiateType(getWriteTypeOfSymbol(symbol), context.mapper) :
|
||||
symbol && !(symbol.flags & (SymbolFlags.TypeLiteral | SymbolFlags.Signature))
|
||||
? instantiateType(getWidenedLiteralType(getTypeOfSymbol(symbol)), context.mapper)
|
||||
: errorType;
|
||||
}
|
||||
@@ -7383,12 +7385,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
if (propertySymbol.flags & SymbolFlags.Accessor) {
|
||||
const writeType = getWriteTypeOfSymbol(propertySymbol);
|
||||
if (propertyType !== writeType && !isErrorType(propertyType) && !isErrorType(writeType)) {
|
||||
const symbolMapper = getSymbolLinks(propertySymbol).mapper;
|
||||
const getterDeclaration = getDeclarationOfKind<GetAccessorDeclaration>(propertySymbol, SyntaxKind.GetAccessor)!;
|
||||
const getterSignature = getSignatureFromDeclaration(getterDeclaration);
|
||||
typeElements.push(
|
||||
setCommentRange(
|
||||
context,
|
||||
signatureToSignatureDeclarationHelper(getterSignature, SyntaxKind.GetAccessor, context, { name: propertyName }) as GetAccessorDeclaration,
|
||||
signatureToSignatureDeclarationHelper(symbolMapper ? instantiateSignature(getterSignature, symbolMapper) : getterSignature, SyntaxKind.GetAccessor, context, { name: propertyName }) as GetAccessorDeclaration,
|
||||
getterDeclaration,
|
||||
),
|
||||
);
|
||||
@@ -7397,7 +7400,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
typeElements.push(
|
||||
setCommentRange(
|
||||
context,
|
||||
signatureToSignatureDeclarationHelper(setterSignature, SyntaxKind.SetAccessor, context, { name: propertyName }) as SetAccessorDeclaration,
|
||||
signatureToSignatureDeclarationHelper(symbolMapper ? instantiateSignature(setterSignature, symbolMapper) : setterSignature, SyntaxKind.SetAccessor, context, { name: propertyName }) as SetAccessorDeclaration,
|
||||
setterDeclaration,
|
||||
),
|
||||
);
|
||||
@@ -8662,6 +8665,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration, context.enclosingDeclaration);
|
||||
const decl = declaration ?? symbol.valueDeclaration ?? getDeclarationWithTypeAnnotation(symbol) ?? symbol.declarations?.[0];
|
||||
if (decl) {
|
||||
const restore = addSymbolTypeToContext(context, symbol, type);
|
||||
if (isAccessor(decl)) {
|
||||
result = syntacticNodeBuilder.serializeTypeOfAccessor(decl, symbol, context);
|
||||
}
|
||||
@@ -8670,10 +8674,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
&& !nodeIsSynthesized(decl)
|
||||
&& !(getObjectFlags(type) & ObjectFlags.RequiresWidening)
|
||||
) {
|
||||
const restore = addSymbolTypeToContext(context, symbol, type);
|
||||
result = syntacticNodeBuilder.serializeTypeOfDeclaration(decl, symbol, context);
|
||||
restore();
|
||||
}
|
||||
restore();
|
||||
}
|
||||
if (!result) {
|
||||
if (addUndefinedForParameter) {
|
||||
|
||||
@@ -764,7 +764,7 @@ export function createSyntacticTypeNodeBuilder(
|
||||
return withNewScope(context, node, () => serializeTypeAnnotationOfDeclaration(accessorType, context, node, symbol) ?? inferTypeOfDeclaration(node, symbol, context));
|
||||
}
|
||||
if (accessorDeclarations.getAccessor) {
|
||||
return withNewScope(context, accessorDeclarations.getAccessor, () => createReturnFromSignature(accessorDeclarations.getAccessor!, /*symbol*/ undefined, context));
|
||||
return withNewScope(context, accessorDeclarations.getAccessor, () => createReturnFromSignature(accessorDeclarations.getAccessor!, symbol, context));
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
@@ -855,14 +855,14 @@ export function createSyntacticTypeNodeBuilder(
|
||||
return resolver.serializeTypeOfExpression(context, node) ?? factory.createKeywordTypeNode(SyntaxKind.AnyKeyword);
|
||||
}
|
||||
|
||||
function inferReturnTypeOfSignatureSignature(node: SignatureDeclaration | JSDocSignature, context: SyntacticTypeNodeBuilderContext, reportFallback: boolean) {
|
||||
function inferReturnTypeOfSignatureSignature(node: SignatureDeclaration | JSDocSignature, context: SyntacticTypeNodeBuilderContext, symbol: Symbol | undefined, reportFallback: boolean) {
|
||||
if (reportFallback) {
|
||||
context.tracker.reportInferenceFallback(node);
|
||||
}
|
||||
if (context.noInferenceFallback === true) {
|
||||
return factory.createKeywordTypeNode(SyntaxKind.AnyKeyword);
|
||||
}
|
||||
return resolver.serializeReturnTypeForSignature(context, node) ?? factory.createKeywordTypeNode(SyntaxKind.AnyKeyword);
|
||||
return resolver.serializeReturnTypeForSignature(context, node, symbol) ?? factory.createKeywordTypeNode(SyntaxKind.AnyKeyword);
|
||||
}
|
||||
|
||||
function inferAccessorType(node: GetAccessorDeclaration | SetAccessorDeclaration, allAccessors: AllAccessorDeclarations, context: SyntacticTypeNodeBuilderContext, symbol: Symbol | undefined, reportFallback: boolean = true): TypeNode | undefined {
|
||||
@@ -1276,7 +1276,7 @@ export function createSyntacticTypeNodeBuilder(
|
||||
else if (isValueSignatureDeclaration(fn)) {
|
||||
returnType = typeFromSingleReturnExpression(fn, context);
|
||||
}
|
||||
return returnType.type !== undefined ? returnType.type : inferReturnTypeOfSignatureSignature(fn, context, reportFallback && returnType.reportFallback && !returnTypeNode);
|
||||
return returnType.type !== undefined ? returnType.type : inferReturnTypeOfSignatureSignature(fn, context, symbol, reportFallback && returnType.reportFallback && !returnTypeNode);
|
||||
}
|
||||
|
||||
function typeFromSingleReturnExpression(declaration: FunctionLikeDeclaration | undefined, context: SyntacticTypeNodeBuilderContext): SyntacticResult {
|
||||
|
||||
@@ -10553,7 +10553,7 @@ export interface SyntacticTypeNodeBuilderResolver {
|
||||
isDefinitelyReferenceToGlobalSymbolObject(node: Node): boolean;
|
||||
isEntityNameVisible(context: SyntacticTypeNodeBuilderContext, entityName: EntityNameOrEntityNameExpression, shouldComputeAliasToMakeVisible?: boolean): SymbolVisibilityResult;
|
||||
serializeExistingTypeNode(context: SyntacticTypeNodeBuilderContext, node: TypeNode, addUndefined?: boolean): TypeNode | undefined;
|
||||
serializeReturnTypeForSignature(context: SyntacticTypeNodeBuilderContext, signatureDeclaration: SignatureDeclaration | JSDocSignature): TypeNode | undefined;
|
||||
serializeReturnTypeForSignature(context: SyntacticTypeNodeBuilderContext, signatureDeclaration: SignatureDeclaration | JSDocSignature, symbol: Symbol | undefined): TypeNode | undefined;
|
||||
serializeTypeOfExpression(context: SyntacticTypeNodeBuilderContext, expr: Expression): TypeNode;
|
||||
serializeTypeOfDeclaration(context: SyntacticTypeNodeBuilderContext, node: HasInferredType | GetAccessorDeclaration | SetAccessorDeclaration, symbol: Symbol | undefined): TypeNode | undefined;
|
||||
serializeNameOfParameter(context: SyntacticTypeNodeBuilderContext, parameter: ParameterDeclaration): BindingName | string;
|
||||
|
||||
Reference in New Issue
Block a user