From e2c6818894ddb63e5d3ac23db45a57f3a81586e9 Mon Sep 17 00:00:00 2001 From: Cameron Boyd Date: Fri, 23 May 2025 13:42:38 -0700 Subject: [PATCH 1/2] Return an error if either the left or right value are of type boolean --- src/compiler/checker.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index a5c161abae051..3bc7b37cea902 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -40116,6 +40116,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return sourceType; } + function isBoolean(value: any): boolean { + return (value === typeof "boolean"); + } + /** * This is a *shallow* check: An expression is side-effect-free if the * evaluation of the expression *itself* cannot produce side effects. @@ -40612,6 +40616,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { leftType = getBaseTypeOfLiteralTypeForComparison(checkNonNullType(leftType, left)); rightType = getBaseTypeOfLiteralTypeForComparison(checkNonNullType(rightType, right)); reportOperatorErrorUnless((left, right) => { + if (isBoolean(left) || isBoolean(right)) { + return true; + } if (isTypeAny(left) || isTypeAny(right)) { return true; } From 0dd8b231fc01a35a80b082022ae6402c1b5bbd4a Mon Sep 17 00:00:00 2001 From: Cameron Boyd Date: Tue, 3 Jun 2025 17:11:59 -0700 Subject: [PATCH 2/2] Add check for unknown type --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3bc7b37cea902..b6b2ec9dc015e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -12975,7 +12975,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { const s = signatures[0]; if (!s.typeParameters && s.parameters.length === 1 && signatureHasRestParameter(s)) { const paramType = getTypeOfParameter(s.parameters[0]); - return isTypeAny(paramType) || getElementTypeOfArrayType(paramType) === anyType; + return isTypeAny(paramType) || getElementTypeOfArrayType(paramType) === anyType || getElementTypeOfArrayType(paramType) === unknownType; } } return false;