MCPcopy Index your code
hub / github.com/nodejs/node / narrowTypeByEquality

Function narrowTypeByEquality

test/fixtures/snapshot/typescript.js:70989–71031  ·  view source on GitHub ↗
(type, operator, value, assumeTrue)

Source from the content-addressed store, hash-verified

70987 return removeNullable ? getTypeWithFacts(type, 2097152 /* TypeFacts.NEUndefinedOrNull */) : type;
70988 }
70989 function narrowTypeByEquality(type, operator, value, assumeTrue) {
70990 if (type.flags & 1 /* TypeFlags.Any */) {
70991 return type;
70992 }
70993 if (operator === 35 /* SyntaxKind.ExclamationEqualsToken */ || operator === 37 /* SyntaxKind.ExclamationEqualsEqualsToken */) {
70994 assumeTrue = !assumeTrue;
70995 }
70996 var valueType = getTypeOfExpression(value);
70997 if (assumeTrue && (type.flags & 2 /* TypeFlags.Unknown */) && (operator === 34 /* SyntaxKind.EqualsEqualsToken */ || operator === 35 /* SyntaxKind.ExclamationEqualsToken */) && (valueType.flags & 65536 /* TypeFlags.Null */)) {
70998 return getUnionType([nullType, undefinedType]);
70999 }
71000 if ((type.flags & 2 /* TypeFlags.Unknown */) && assumeTrue && (operator === 36 /* SyntaxKind.EqualsEqualsEqualsToken */ || operator === 37 /* SyntaxKind.ExclamationEqualsEqualsToken */)) {
71001 if (valueType.flags & (131068 /* TypeFlags.Primitive */ | 67108864 /* TypeFlags.NonPrimitive */)) {
71002 return valueType;
71003 }
71004 if (valueType.flags & 524288 /* TypeFlags.Object */) {
71005 return nonPrimitiveType;
71006 }
71007 return type;
71008 }
71009 if (valueType.flags & 98304 /* TypeFlags.Nullable */) {
71010 if (!strictNullChecks) {
71011 return type;
71012 }
71013 var doubleEquals = operator === 34 /* SyntaxKind.EqualsEqualsToken */ || operator === 35 /* SyntaxKind.ExclamationEqualsToken */;
71014 var facts = doubleEquals ?
71015 assumeTrue ? 262144 /* TypeFacts.EQUndefinedOrNull */ : 2097152 /* TypeFacts.NEUndefinedOrNull */ :
71016 valueType.flags & 65536 /* TypeFlags.Null */ ?
71017 assumeTrue ? 131072 /* TypeFacts.EQNull */ : 1048576 /* TypeFacts.NENull */ :
71018 assumeTrue ? 65536 /* TypeFacts.EQUndefined */ : 524288 /* TypeFacts.NEUndefined */;
71019 return type.flags & 2 /* TypeFlags.Unknown */ && facts & (1048576 /* TypeFacts.NENull */ | 2097152 /* TypeFacts.NEUndefinedOrNull */) ? nonNullUnknownType : getTypeWithFacts(type, facts);
71020 }
71021 if (assumeTrue) {
71022 var filterFn = operator === 34 /* SyntaxKind.EqualsEqualsToken */ ?
71023 function (t) { return areTypesComparable(t, valueType) || isCoercibleUnderDoubleEquals(t, valueType); } :
71024 function (t) { return areTypesComparable(t, valueType); };
71025 return replacePrimitivesWithLiterals(filterType(type, filterFn), valueType);
71026 }
71027 if (isUnitType(valueType)) {
71028 return filterType(type, function (t) { return !(isUnitLikeType(t) && areTypesComparable(t, valueType)); });
71029 }
71030 return type;
71031 }
71032 function narrowTypeByTypeof(type, typeOfExpr, operator, literal, assumeTrue) {
71033 // We have '==', '!=', '===', or !==' operator with 'typeof xxx' and string literal operands
71034 if (operator === 35 /* SyntaxKind.ExclamationEqualsToken */ || operator === 37 /* SyntaxKind.ExclamationEqualsEqualsToken */) {

Callers 2

Calls 9

getTypeOfExpressionFunction · 0.85
getUnionTypeFunction · 0.85
getTypeWithFactsFunction · 0.85
areTypesComparableFunction · 0.85
filterTypeFunction · 0.85
isUnitTypeFunction · 0.85
isUnitLikeTypeFunction · 0.85

Tested by

no test coverage detected