Skip to content

Commit 1a02e73

Browse files
committed
Allow unions and unit types to narrow to 'never'
1 parent fd0ad29 commit 1a02e73

File tree

1 file changed

+3
-6
lines changed

1 file changed

+3
-6
lines changed

src/compiler/checker.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20229,7 +20229,7 @@ namespace ts {
2022920229
}
2023020230

2023120231
function createFlowType(type: Type, incomplete: boolean): FlowType {
20232-
return incomplete ? { flags: 0, type } : type;
20232+
return incomplete ? { flags: 0, type: type.flags & TypeFlags.Never ? silentNeverType : type } : type;
2023320233
}
2023420234

2023520235
// An evolving array type tracks the element types that have so far been seen in an
@@ -20817,9 +20817,7 @@ namespace ts {
2081720817
if (narrowedType === nonEvolvingType) {
2081820818
return flowType;
2081920819
}
20820-
const incomplete = isIncomplete(flowType);
20821-
const resultType = incomplete && narrowedType.flags & TypeFlags.Never ? silentNeverType : narrowedType;
20822-
return createFlowType(resultType, incomplete);
20820+
return createFlowType(narrowedType, isIncomplete(flowType));
2082320821
}
2082420822

2082520823
function getTypeAtSwitchClause(flow: FlowSwitchClause): FlowType {
@@ -21164,8 +21162,7 @@ namespace ts {
2116421162
const filterFn: (t: Type) => boolean = operator === SyntaxKind.EqualsEqualsToken ?
2116521163
(t => areTypesComparable(t, valueType) || isCoercibleUnderDoubleEquals(t, valueType)) :
2116621164
t => areTypesComparable(t, valueType);
21167-
const narrowedType = filterType(type, filterFn);
21168-
return narrowedType.flags & TypeFlags.Never ? type : replacePrimitivesWithLiterals(narrowedType, valueType);
21165+
return replacePrimitivesWithLiterals(filterType(type, filterFn), valueType);
2116921166
}
2117021167
if (isUnitType(valueType)) {
2117121168
const regularType = getRegularTypeOfLiteralType(valueType);

0 commit comments

Comments
 (0)