mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-09 16:39:46 -05:00
Make contextFlags an explicitly required parameter (#49720)
This commit is contained in:
@@ -559,7 +559,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
},
|
||||
getContextualTypeForObjectLiteralElement: nodeIn => {
|
||||
const node = getParseTreeNode(nodeIn, isObjectLiteralElementLike);
|
||||
return node ? getContextualTypeForObjectLiteralElement(node) : undefined;
|
||||
return node ? getContextualTypeForObjectLiteralElement(node, /*contextFlags*/ undefined) : undefined;
|
||||
},
|
||||
getContextualTypeForArgumentAtIndex: (nodeIn, argIndex) => {
|
||||
const node = getParseTreeNode(nodeIn, isCallLikeExpression);
|
||||
@@ -567,7 +567,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
},
|
||||
getContextualTypeForJsxAttribute: (nodeIn) => {
|
||||
const node = getParseTreeNode(nodeIn, isJsxAttributeLike);
|
||||
return node && getContextualTypeForJsxAttribute(node);
|
||||
return node && getContextualTypeForJsxAttribute(node, /*contextFlags*/ undefined);
|
||||
},
|
||||
isContextSensitive,
|
||||
getTypeOfPropertyOfContextualType,
|
||||
@@ -25641,7 +25641,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
!((isJsxOpeningElement(node.parent) || isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) &&
|
||||
(checkMode && checkMode & CheckMode.RestBindingElement ?
|
||||
getContextualType(node, ContextFlags.SkipBindingPatterns)
|
||||
: getContextualType(node));
|
||||
: getContextualType(node, /*contextFlags*/ undefined));
|
||||
return contextualType && !isGenericType(contextualType);
|
||||
}
|
||||
|
||||
@@ -26590,7 +26590,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
// We have an object literal method. Check if the containing object literal has a contextual type
|
||||
// that includes a ThisType<T>. If so, T is the contextual type for 'this'. We continue looking in
|
||||
// any directly enclosing object literals.
|
||||
const contextualType = getApparentTypeOfContextualType(containingLiteral);
|
||||
const contextualType = getApparentTypeOfContextualType(containingLiteral, /*contextFlags*/ undefined);
|
||||
let literal = containingLiteral;
|
||||
let type = contextualType;
|
||||
while (type) {
|
||||
@@ -26602,7 +26602,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
break;
|
||||
}
|
||||
literal = literal.parent.parent as ObjectLiteralExpression;
|
||||
type = getApparentTypeOfContextualType(literal);
|
||||
type = getApparentTypeOfContextualType(literal, /*contextFlags*/ undefined);
|
||||
}
|
||||
// There was no contextual ThisType<T> for the containing object literal, so the contextual type
|
||||
// for 'this' is the non-null form of the contextual type for the containing object literal or
|
||||
@@ -26662,7 +26662,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
}
|
||||
}
|
||||
|
||||
function getContextualTypeForVariableLikeDeclaration(declaration: VariableLikeDeclaration): Type | undefined {
|
||||
function getContextualTypeForVariableLikeDeclaration(declaration: VariableLikeDeclaration, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
const typeNode = getEffectiveTypeAnnotationNode(declaration);
|
||||
if (typeNode) {
|
||||
return getTypeFromTypeNode(typeNode);
|
||||
@@ -26671,19 +26671,19 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
case SyntaxKind.Parameter:
|
||||
return getContextuallyTypedParameterType(declaration);
|
||||
case SyntaxKind.BindingElement:
|
||||
return getContextualTypeForBindingElement(declaration);
|
||||
return getContextualTypeForBindingElement(declaration, contextFlags);
|
||||
case SyntaxKind.PropertyDeclaration:
|
||||
if (isStatic(declaration)) {
|
||||
return getContextualTypeForStaticPropertyDeclaration(declaration);
|
||||
return getContextualTypeForStaticPropertyDeclaration(declaration, contextFlags);
|
||||
}
|
||||
// By default, do nothing and return undefined - only the above cases have context implied by a parent
|
||||
}
|
||||
}
|
||||
|
||||
function getContextualTypeForBindingElement(declaration: BindingElement): Type | undefined {
|
||||
function getContextualTypeForBindingElement(declaration: BindingElement, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
const parent = declaration.parent.parent;
|
||||
const name = declaration.propertyName || declaration.name;
|
||||
const parentType = getContextualTypeForVariableLikeDeclaration(parent) ||
|
||||
const parentType = getContextualTypeForVariableLikeDeclaration(parent, contextFlags) ||
|
||||
parent.kind !== SyntaxKind.BindingElement && parent.initializer && checkDeclarationInitializer(parent, declaration.dotDotDotToken ? CheckMode.RestBindingElement : CheckMode.Normal);
|
||||
if (!parentType || isBindingPattern(name) || isComputedNonLiteralName(name)) return undefined;
|
||||
if (parent.name.kind === SyntaxKind.ArrayBindingPattern) {
|
||||
@@ -26698,8 +26698,8 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
}
|
||||
}
|
||||
|
||||
function getContextualTypeForStaticPropertyDeclaration(declaration: PropertyDeclaration): Type | undefined {
|
||||
const parentType = isExpression(declaration.parent) && getContextualType(declaration.parent);
|
||||
function getContextualTypeForStaticPropertyDeclaration(declaration: PropertyDeclaration, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
const parentType = isExpression(declaration.parent) && getContextualType(declaration.parent, contextFlags);
|
||||
if (!parentType) return undefined;
|
||||
return getTypeOfPropertyOfContextualType(parentType, getSymbolOfNode(declaration).escapedName);
|
||||
}
|
||||
@@ -26712,10 +26712,10 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
// the contextual type of an initializer expression is the type implied by the binding pattern.
|
||||
// Otherwise, in a binding pattern inside a variable or parameter declaration,
|
||||
// the contextual type of an initializer expression is the type annotation of the containing declaration, if present.
|
||||
function getContextualTypeForInitializerExpression(node: Expression, contextFlags?: ContextFlags): Type | undefined {
|
||||
function getContextualTypeForInitializerExpression(node: Expression, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
const declaration = node.parent as VariableLikeDeclaration;
|
||||
if (hasInitializer(declaration) && node === declaration.initializer) {
|
||||
const result = getContextualTypeForVariableLikeDeclaration(declaration);
|
||||
const result = getContextualTypeForVariableLikeDeclaration(declaration, contextFlags);
|
||||
if (result) {
|
||||
return result;
|
||||
}
|
||||
@@ -26726,10 +26726,10 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function getContextualTypeForReturnExpression(node: Expression): Type | undefined {
|
||||
function getContextualTypeForReturnExpression(node: Expression, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
const func = getContainingFunction(node);
|
||||
if (func) {
|
||||
let contextualReturnType = getContextualReturnType(func);
|
||||
let contextualReturnType = getContextualReturnType(func, contextFlags);
|
||||
if (contextualReturnType) {
|
||||
const functionFlags = getFunctionFlags(func);
|
||||
if (functionFlags & FunctionFlags.Generator) { // Generator or AsyncGenerator function
|
||||
@@ -26754,7 +26754,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function getContextualTypeForAwaitOperand(node: AwaitExpression, contextFlags?: ContextFlags): Type | undefined {
|
||||
function getContextualTypeForAwaitOperand(node: AwaitExpression, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
const contextualType = getContextualType(node, contextFlags);
|
||||
if (contextualType) {
|
||||
const contextualAwaitedType = getAwaitedTypeNoAlias(contextualType);
|
||||
@@ -26763,11 +26763,11 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function getContextualTypeForYieldOperand(node: YieldExpression): Type | undefined {
|
||||
function getContextualTypeForYieldOperand(node: YieldExpression, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
const func = getContainingFunction(node);
|
||||
if (func) {
|
||||
const functionFlags = getFunctionFlags(func);
|
||||
const contextualReturnType = getContextualReturnType(func);
|
||||
const contextualReturnType = getContextualReturnType(func, contextFlags);
|
||||
if (contextualReturnType) {
|
||||
return node.asteriskToken
|
||||
? contextualReturnType
|
||||
@@ -26796,7 +26796,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
|
||||
function getContextualIterationType(kind: IterationTypeKind, functionDecl: SignatureDeclaration): Type | undefined {
|
||||
const isAsync = !!(getFunctionFlags(functionDecl) & FunctionFlags.Async);
|
||||
const contextualReturnType = getContextualReturnType(functionDecl);
|
||||
const contextualReturnType = getContextualReturnType(functionDecl, /*contextFlags*/ undefined);
|
||||
if (contextualReturnType) {
|
||||
return getIterationTypeOfGeneratorFunctionReturnType(kind, contextualReturnType, isAsync)
|
||||
|| undefined;
|
||||
@@ -26805,7 +26805,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function getContextualReturnType(functionDecl: SignatureDeclaration): Type | undefined {
|
||||
function getContextualReturnType(functionDecl: SignatureDeclaration, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
// If the containing function has a return type annotation, is a constructor, or is a get accessor whose
|
||||
// corresponding set accessor has a type annotation, return statements in the function are contextually typed
|
||||
const returnType = getReturnTypeFromAnnotation(functionDecl);
|
||||
@@ -26820,7 +26820,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
}
|
||||
const iife = getImmediatelyInvokedFunctionExpression(functionDecl);
|
||||
if (iife) {
|
||||
return getContextualType(iife);
|
||||
return getContextualType(iife, contextFlags);
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
@@ -26860,7 +26860,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function getContextualTypeForBinaryOperand(node: Expression, contextFlags?: ContextFlags): Type | undefined {
|
||||
function getContextualTypeForBinaryOperand(node: Expression, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
const binaryExpression = node.parent as BinaryExpression;
|
||||
const { left, operatorToken, right } = binaryExpression;
|
||||
switch (operatorToken.kind) {
|
||||
@@ -27076,7 +27076,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
// In an object literal contextually typed by a type T, the contextual type of a property assignment is the type of
|
||||
// the matching property in T, if one exists. Otherwise, it is the type of the numeric index signature in T, if one
|
||||
// exists. Otherwise, it is the type of the string index signature in T, if one exists.
|
||||
function getContextualTypeForObjectLiteralMethod(node: MethodDeclaration, contextFlags?: ContextFlags): Type | undefined {
|
||||
function getContextualTypeForObjectLiteralMethod(node: MethodDeclaration, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
Debug.assert(isObjectLiteralMethod(node));
|
||||
if (node.flags & NodeFlags.InWithStatement) {
|
||||
// We cannot answer semantic questions within a with block, do not proceed any further
|
||||
@@ -27085,9 +27085,9 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
return getContextualTypeForObjectLiteralElement(node, contextFlags);
|
||||
}
|
||||
|
||||
function getContextualTypeForObjectLiteralElement(element: ObjectLiteralElementLike, contextFlags?: ContextFlags) {
|
||||
function getContextualTypeForObjectLiteralElement(element: ObjectLiteralElementLike, contextFlags: ContextFlags | undefined) {
|
||||
const objectLiteral = element.parent as ObjectLiteralExpression;
|
||||
const propertyAssignmentType = isPropertyAssignment(element) && getContextualTypeForVariableLikeDeclaration(element);
|
||||
const propertyAssignmentType = isPropertyAssignment(element) && getContextualTypeForVariableLikeDeclaration(element, contextFlags);
|
||||
if (propertyAssignmentType) {
|
||||
return propertyAssignmentType;
|
||||
}
|
||||
@@ -27123,12 +27123,12 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
}
|
||||
|
||||
// In a contextually typed conditional expression, the true/false expressions are contextually typed by the same type.
|
||||
function getContextualTypeForConditionalOperand(node: Expression, contextFlags?: ContextFlags): Type | undefined {
|
||||
function getContextualTypeForConditionalOperand(node: Expression, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
const conditional = node.parent as ConditionalExpression;
|
||||
return node === conditional.whenTrue || node === conditional.whenFalse ? getContextualType(conditional, contextFlags) : undefined;
|
||||
}
|
||||
|
||||
function getContextualTypeForChildJsxExpression(node: JsxElement, child: JsxChild, contextFlags?: ContextFlags) {
|
||||
function getContextualTypeForChildJsxExpression(node: JsxElement, child: JsxChild, contextFlags: ContextFlags | undefined) {
|
||||
const attributesType = getApparentTypeOfContextualType(node.openingElement.tagName, contextFlags);
|
||||
// JSX expression is in children of JSX Element, we will look for an "children" attribute (we get the name from JSX.ElementAttributesProperty)
|
||||
const jsxChildrenPropertyName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
|
||||
@@ -27148,7 +27148,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
}, /*noReductions*/ true));
|
||||
}
|
||||
|
||||
function getContextualTypeForJsxExpression(node: JsxExpression, contextFlags?: ContextFlags): Type | undefined {
|
||||
function getContextualTypeForJsxExpression(node: JsxExpression, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
const exprParent = node.parent;
|
||||
return isJsxAttributeLike(exprParent)
|
||||
? getContextualType(node, contextFlags)
|
||||
@@ -27157,7 +27157,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
: undefined;
|
||||
}
|
||||
|
||||
function getContextualTypeForJsxAttribute(attribute: JsxAttribute | JsxSpreadAttribute, contextFlags?: ContextFlags): Type | undefined {
|
||||
function getContextualTypeForJsxAttribute(attribute: JsxAttribute | JsxSpreadAttribute, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
// When we trying to resolve JsxOpeningLikeElement as a stateless function element, we will already give its attributes a contextual type
|
||||
// which is a type of the parameter of the signature we are trying out.
|
||||
// If there is no contextual type (e.g. we are trying to resolve stateful component), get attributes type from resolving element's tagName
|
||||
@@ -27233,7 +27233,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
|
||||
// Return the contextual type for a given expression node. During overload resolution, a contextual type may temporarily
|
||||
// be "pushed" onto a node using the contextualType property.
|
||||
function getApparentTypeOfContextualType(node: Expression | MethodDeclaration, contextFlags?: ContextFlags): Type | undefined {
|
||||
function getApparentTypeOfContextualType(node: Expression | MethodDeclaration, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
const contextualType = isObjectLiteralMethod(node) ?
|
||||
getContextualTypeForObjectLiteralMethod(node, contextFlags) :
|
||||
getContextualType(node, contextFlags);
|
||||
@@ -27248,7 +27248,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
|
||||
// If the given contextual type contains instantiable types and if a mapper representing
|
||||
// return type inferences is available, instantiate those types using that mapper.
|
||||
function instantiateContextualType(contextualType: Type | undefined, node: Node, contextFlags?: ContextFlags): Type | undefined {
|
||||
function instantiateContextualType(contextualType: Type | undefined, node: Node, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
if (contextualType && maybeTypeOfKind(contextualType, TypeFlags.Instantiable)) {
|
||||
const inferenceContext = getInferenceContext(node);
|
||||
// If no inferences have been made, nothing is gained from instantiating as type parameters
|
||||
@@ -27305,7 +27305,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
* @param node the expression whose contextual type will be returned.
|
||||
* @returns the contextual type of an expression.
|
||||
*/
|
||||
function getContextualType(node: Expression, contextFlags?: ContextFlags): Type | undefined {
|
||||
function getContextualType(node: Expression, contextFlags: ContextFlags | undefined): Type | undefined {
|
||||
if (node.flags & NodeFlags.InWithStatement) {
|
||||
// We cannot answer semantic questions within a with block, do not proceed any further
|
||||
return undefined;
|
||||
@@ -27323,9 +27323,9 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
return getContextualTypeForInitializerExpression(node, contextFlags);
|
||||
case SyntaxKind.ArrowFunction:
|
||||
case SyntaxKind.ReturnStatement:
|
||||
return getContextualTypeForReturnExpression(node);
|
||||
return getContextualTypeForReturnExpression(node, contextFlags);
|
||||
case SyntaxKind.YieldExpression:
|
||||
return getContextualTypeForYieldOperand(parent as YieldExpression);
|
||||
return getContextualTypeForYieldOperand(parent as YieldExpression, contextFlags);
|
||||
case SyntaxKind.AwaitExpression:
|
||||
return getContextualTypeForAwaitOperand(parent as AwaitExpression, contextFlags);
|
||||
case SyntaxKind.CallExpression:
|
||||
@@ -27374,7 +27374,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
return undefined;
|
||||
|
||||
function tryFindWhenConstTypeReference(node: Expression) {
|
||||
return getContextualType(node);
|
||||
return getContextualType(node, contextFlags);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27383,7 +27383,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
return ancestor && ancestor.inferenceContext!;
|
||||
}
|
||||
|
||||
function getContextualJsxElementAttributesType(node: JsxOpeningLikeElement, contextFlags?: ContextFlags) {
|
||||
function getContextualJsxElementAttributesType(node: JsxOpeningLikeElement, contextFlags: ContextFlags | undefined) {
|
||||
if (isJsxOpeningElement(node) && node.parent.contextualType && contextFlags !== ContextFlags.Completions) {
|
||||
// Contextually applied type is moved from attributes up to the outer jsx attributes so when walking up from the children they get hit
|
||||
// _However_ to hit them from the _attributes_ we must look for them here; otherwise we'll used the declared type
|
||||
@@ -27715,7 +27715,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
const elementCount = elements.length;
|
||||
const elementTypes: Type[] = [];
|
||||
const elementFlags: ElementFlags[] = [];
|
||||
const contextualType = getApparentTypeOfContextualType(node);
|
||||
const contextualType = getApparentTypeOfContextualType(node, /*contextFlags*/ undefined);
|
||||
const inDestructuringPattern = isAssignmentTarget(node);
|
||||
const inConstContext = isConstContext(node);
|
||||
let hasOmittedExpression = false;
|
||||
@@ -27896,7 +27896,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
let propertiesArray: Symbol[] = [];
|
||||
let spread: Type = emptyObjectType;
|
||||
|
||||
const contextualType = getApparentTypeOfContextualType(node);
|
||||
const contextualType = getApparentTypeOfContextualType(node, /*contextFlags*/ undefined);
|
||||
const contextualTypeHasPattern = contextualType && contextualType.pattern &&
|
||||
(contextualType.pattern.kind === SyntaxKind.ObjectBindingPattern || contextualType.pattern.kind === SyntaxKind.ObjectLiteralExpression);
|
||||
const inConstContext = isConstContext(node);
|
||||
@@ -28265,7 +28265,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
error(attributes, Diagnostics._0_are_specified_twice_The_attribute_named_0_will_be_overwritten, unescapeLeadingUnderscores(jsxChildrenPropertyName));
|
||||
}
|
||||
|
||||
const contextualType = getApparentTypeOfContextualType(openingLikeElement.attributes);
|
||||
const contextualType = getApparentTypeOfContextualType(openingLikeElement.attributes, /*contextFlags*/ undefined);
|
||||
const childrenContextualType = contextualType && getTypeOfPropertyOfContextualType(contextualType, jsxChildrenPropertyName);
|
||||
// If there are children in the body of JSX element, create dummy attribute "children" with the union of children types so that it will pass the attribute checking process
|
||||
const childrenPropSymbol = createSymbol(SymbolFlags.Property, jsxChildrenPropertyName);
|
||||
@@ -32769,7 +32769,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
const contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func);
|
||||
const contextualType = !contextualSignature ? undefined :
|
||||
contextualSignature === getSignatureFromDeclaration(func) ? isGenerator ? undefined : returnType :
|
||||
instantiateContextualType(getReturnTypeOfSignature(contextualSignature), func);
|
||||
instantiateContextualType(getReturnTypeOfSignature(contextualSignature), func, /*contextFlags*/ undefined);
|
||||
if (isGenerator) {
|
||||
yieldType = getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(yieldType, contextualType, IterationTypeKind.Yield, isAsync);
|
||||
returnType = getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(returnType, contextualType, IterationTypeKind.Return, isAsync);
|
||||
@@ -32851,7 +32851,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
nextType = iterationTypes && iterationTypes.nextType;
|
||||
}
|
||||
else {
|
||||
nextType = getContextualType(yieldExpression);
|
||||
nextType = getContextualType(yieldExpression, /*contextFlags*/ undefined);
|
||||
}
|
||||
if (nextType) pushIfUnique(nextTypes, nextType);
|
||||
});
|
||||
@@ -34478,7 +34478,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
type = anyType;
|
||||
addLazyDiagnostic(() => {
|
||||
if (noImplicitAny && !expressionResultIsUnused(node)) {
|
||||
const contextualType = getContextualType(node);
|
||||
const contextualType = getContextualType(node, /*contextFlags*/ undefined);
|
||||
if (!contextualType || isTypeAny(contextualType)) {
|
||||
error(node, Diagnostics.yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_type_annotation);
|
||||
}
|
||||
@@ -34523,7 +34523,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
texts.push(span.literal.text);
|
||||
types.push(isTypeAssignableTo(type, templateConstraintType) ? type : stringType);
|
||||
}
|
||||
return isConstContext(node) || isTemplateLiteralContext(node) || someType(getContextualType(node) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
|
||||
return isConstContext(node) || isTemplateLiteralContext(node) || someType(getContextualType(node, /*contextFlags*/ undefined) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
|
||||
}
|
||||
|
||||
function isTemplateLiteralContextualType(type: Type): boolean {
|
||||
@@ -34554,7 +34554,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
// We strip literal freshness when an appropriate contextual type is present such that contextually typed
|
||||
// literals always preserve their literal types (otherwise they might widen during type inference). An alternative
|
||||
// here would be to not mark contextually typed literals as fresh in the first place.
|
||||
const result = maybeTypeOfKind(type, TypeFlags.Literal) && isLiteralOfContextualType(type, instantiateContextualType(contextualType, node)) ?
|
||||
const result = maybeTypeOfKind(type, TypeFlags.Literal) && isLiteralOfContextualType(type, instantiateContextualType(contextualType, node, /*contextFlags*/ undefined)) ?
|
||||
getRegularTypeOfLiteralType(type) : type;
|
||||
return result;
|
||||
}
|
||||
@@ -34681,7 +34681,7 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n")
|
||||
const type = checkExpression(node, checkMode, forceTuple);
|
||||
return isConstContext(node) || isCommonJsExportedExpression(node) ? getRegularTypeOfLiteralType(type) :
|
||||
isTypeAssertion(node) ? type :
|
||||
getWidenedLiteralLikeTypeForContextualType(type, instantiateContextualType(arguments.length === 2 ? getContextualType(node) : contextualType, node));
|
||||
getWidenedLiteralLikeTypeForContextualType(type, instantiateContextualType(arguments.length === 2 ? getContextualType(node, /*contextFlags*/ undefined) : contextualType, node, /*contextFlags*/ undefined));
|
||||
}
|
||||
|
||||
function checkPropertyAssignment(node: PropertyAssignment, checkMode?: CheckMode): Type {
|
||||
|
||||
Reference in New Issue
Block a user