@@ -20229,7 +20229,7 @@ namespace ts {
20229
20229
}
20230
20230
20231
20231
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;
20233
20233
}
20234
20234
20235
20235
// An evolving array type tracks the element types that have so far been seen in an
@@ -20817,9 +20817,7 @@ namespace ts {
20817
20817
if (narrowedType === nonEvolvingType) {
20818
20818
return flowType;
20819
20819
}
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));
20823
20821
}
20824
20822
20825
20823
function getTypeAtSwitchClause(flow: FlowSwitchClause): FlowType {
@@ -21164,8 +21162,7 @@ namespace ts {
21164
21162
const filterFn: (t: Type) => boolean = operator === SyntaxKind.EqualsEqualsToken ?
21165
21163
(t => areTypesComparable(t, valueType) || isCoercibleUnderDoubleEquals(t, valueType)) :
21166
21164
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);
21169
21166
}
21170
21167
if (isUnitType(valueType)) {
21171
21168
const regularType = getRegularTypeOfLiteralType(valueType);
0 commit comments