Skip to content

Commit dd00a34

Browse files
Revert "Defer type comparability check for assertions (#53261)"
This reverts commit 8947825.
1 parent 6f9a062 commit dd00a34

File tree

5 files changed

+10
-173
lines changed

5 files changed

+10
-173
lines changed

src/compiler/checker.ts

+10-38
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,6 @@ import {
767767
JSDocSatisfiesTag,
768768
JSDocSignature,
769769
JSDocTemplateTag,
770-
JSDocTypeAssertion,
771770
JSDocTypedefTag,
772771
JSDocTypeExpression,
773772
JSDocTypeLiteral,
@@ -1045,6 +1044,7 @@ import {
10451044
TypeReferenceSerializationKind,
10461045
TypeReferenceType,
10471046
TypeVariable,
1047+
UnaryExpression,
10481048
unescapeLeadingUnderscores,
10491049
UnionOrIntersectionType,
10501050
UnionOrIntersectionTypeNode,
@@ -34434,14 +34434,14 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3443434434
return getReturnTypeOfSignature(signature);
3443534435
}
3443634436

34437-
function checkAssertion(node: AssertionExpression, checkMode: CheckMode | undefined) {
34437+
function checkAssertion(node: AssertionExpression) {
3443834438
if (node.kind === SyntaxKind.TypeAssertionExpression) {
3443934439
const file = getSourceFileOfNode(node);
3444034440
if (file && fileExtensionIsOneOf(file.fileName, [Extension.Cts, Extension.Mts])) {
3444134441
grammarErrorOnNode(node, Diagnostics.This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead);
3444234442
}
3444334443
}
34444-
return checkAssertionWorker(node, checkMode);
34444+
return checkAssertionWorker(node, node.type, node.expression);
3444534445
}
3444634446

3444734447
function isValidConstAssertionArgument(node: Node): boolean {
@@ -34472,42 +34472,16 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3447234472
return false;
3447334473
}
3447434474

34475-
function checkAssertionWorker(node: JSDocTypeAssertion | AssertionExpression, checkMode: CheckMode | undefined) {
34476-
const { type, expression } = getAssertionTypeAndExpression(node);
34477-
const exprType = checkExpression(expression, checkMode);
34475+
function checkAssertionWorker(errNode: Node, type: TypeNode, expression: UnaryExpression | Expression, checkMode?: CheckMode) {
34476+
let exprType = checkExpression(expression, checkMode);
3447834477
if (isConstTypeReference(type)) {
3447934478
if (!isValidConstAssertionArgument(expression)) {
3448034479
error(expression, Diagnostics.A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals);
3448134480
}
3448234481
return getRegularTypeOfLiteralType(exprType);
3448334482
}
3448434483
checkSourceElement(type);
34485-
checkNodeDeferred(node);
34486-
return getTypeFromTypeNode(type);
34487-
}
34488-
34489-
function getAssertionTypeAndExpression(node: JSDocTypeAssertion | AssertionExpression) {
34490-
let type: TypeNode;
34491-
let expression: Expression;
34492-
switch (node.kind) {
34493-
case SyntaxKind.AsExpression:
34494-
case SyntaxKind.TypeAssertionExpression:
34495-
type = node.type;
34496-
expression = node.expression;
34497-
break;
34498-
case SyntaxKind.ParenthesizedExpression:
34499-
type = getJSDocTypeAssertionType(node);
34500-
expression = node.expression;
34501-
break;
34502-
}
34503-
34504-
return { type, expression };
34505-
}
34506-
34507-
function checkAssertionDeferred(node: JSDocTypeAssertion | AssertionExpression) {
34508-
const { type, expression } = getAssertionTypeAndExpression(node);
34509-
const errNode = isParenthesizedExpression(node) ? type : node;
34510-
const exprType = getRegularTypeOfObjectLiteral(getBaseTypeOfLiteralType(checkExpression(expression)));
34484+
exprType = getRegularTypeOfObjectLiteral(getBaseTypeOfLiteralType(exprType));
3451134485
const targetType = getTypeFromTypeNode(type);
3451234486
if (!isErrorType(targetType)) {
3451334487
addLazyDiagnostic(() => {
@@ -34518,6 +34492,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3451834492
}
3451934493
});
3452034494
}
34495+
return targetType;
3452134496
}
3452234497

3452334498
function checkNonNullChain(node: NonNullChain) {
@@ -37756,7 +37731,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3775637731
return checkSatisfiesExpressionWorker(node.expression, getJSDocSatisfiesExpressionType(node), checkMode);
3775737732
}
3775837733
if (isJSDocTypeAssertion(node)) {
37759-
return checkAssertionWorker(node, checkMode);
37734+
const type = getJSDocTypeAssertionType(node);
37735+
return checkAssertionWorker(type, type, node.expression, checkMode);
3776037736
}
3776137737
}
3776237738
return checkExpression(node.expression, checkMode);
@@ -37837,7 +37813,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3783737813
return checkTypeOfExpression(node as TypeOfExpression);
3783837814
case SyntaxKind.TypeAssertionExpression:
3783937815
case SyntaxKind.AsExpression:
37840-
return checkAssertion(node as AssertionExpression, checkMode);
37816+
return checkAssertion(node as AssertionExpression);
3784137817
case SyntaxKind.NonNullExpression:
3784237818
return checkNonNullAssertion(node as NonNullExpression);
3784337819
case SyntaxKind.ExpressionWithTypeArguments:
@@ -44951,10 +44927,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4495144927
case SyntaxKind.JsxElement:
4495244928
checkJsxElementDeferred(node as JsxElement);
4495344929
break;
44954-
case SyntaxKind.TypeAssertionExpression:
44955-
case SyntaxKind.AsExpression:
44956-
case SyntaxKind.ParenthesizedExpression:
44957-
checkAssertionDeferred(node as AssertionExpression | JSDocTypeAssertion);
4495844930
}
4495944931
currentNode = saveCurrentNode;
4496044932
tracing?.pop();

tests/baselines/reference/classVarianceCircularity.js

-32
This file was deleted.

tests/baselines/reference/classVarianceCircularity.symbols

-42
This file was deleted.

tests/baselines/reference/classVarianceCircularity.types

-45
This file was deleted.

tests/cases/compiler/classVarianceCircularity.ts

-16
This file was deleted.

0 commit comments

Comments
 (0)