mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-19 01:33:15 -05:00
Improve comparison operators type checking to disallow unions containing numbers as an operand (#52048)
This commit is contained in:
committed by
GitHub
parent
e5515164eb
commit
2acbceed4b
@@ -36336,9 +36336,15 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
if (checkForDisallowedESSymbolOperand(operator)) {
|
||||
leftType = getBaseTypeOfLiteralType(checkNonNullType(leftType, left));
|
||||
rightType = getBaseTypeOfLiteralType(checkNonNullType(rightType, right));
|
||||
reportOperatorErrorUnless((left, right) =>
|
||||
isTypeComparableTo(left, right) || isTypeComparableTo(right, left) || (
|
||||
isTypeAssignableTo(left, numberOrBigIntType) && isTypeAssignableTo(right, numberOrBigIntType)));
|
||||
reportOperatorErrorUnless((left, right) => {
|
||||
if (isTypeAny(left) || isTypeAny(right)) {
|
||||
return true;
|
||||
}
|
||||
const leftAssignableToNumber = isTypeAssignableTo(left, numberOrBigIntType);
|
||||
const rightAssignableToNumber = isTypeAssignableTo(right, numberOrBigIntType);
|
||||
return leftAssignableToNumber && rightAssignableToNumber ||
|
||||
!leftAssignableToNumber && !rightAssignableToNumber && areTypesComparable(left, right);
|
||||
});
|
||||
}
|
||||
return booleanType;
|
||||
case SyntaxKind.EqualsEqualsToken:
|
||||
|
||||
Reference in New Issue
Block a user