@@ -7168,6 +7168,7 @@ namespace ts {
7168
7168
containsAny?: boolean;
7169
7169
containsUndefined?: boolean;
7170
7170
containsNull?: boolean;
7171
+ containsNever?: boolean;
7171
7172
containsNonWideningType?: boolean;
7172
7173
containsString?: boolean;
7173
7174
containsNumber?: boolean;
@@ -7369,10 +7370,13 @@ namespace ts {
7369
7370
else if (type.flags & TypeFlags.Any) {
7370
7371
typeSet.containsAny = true;
7371
7372
}
7373
+ else if (type.flags & TypeFlags.Never) {
7374
+ typeSet.containsNever = true;
7375
+ }
7372
7376
else if (getObjectFlags(type) & ObjectFlags.Anonymous && isEmptyObjectType(type)) {
7373
7377
typeSet.containsEmptyObject = true;
7374
7378
}
7375
- else if (!(type.flags & TypeFlags.Never) && (strictNullChecks || !(type.flags & TypeFlags.Nullable)) && !contains(typeSet, type)) {
7379
+ else if ((strictNullChecks || !(type.flags & TypeFlags.Nullable)) && !contains(typeSet, type)) {
7376
7380
if (type.flags & TypeFlags.Object) {
7377
7381
typeSet.containsObjectType = true;
7378
7382
}
@@ -7410,6 +7414,9 @@ namespace ts {
7410
7414
}
7411
7415
const typeSet = [] as TypeSet;
7412
7416
addTypesToIntersection(typeSet, types);
7417
+ if (typeSet.containsNever) {
7418
+ return neverType;
7419
+ }
7413
7420
if (typeSet.containsAny) {
7414
7421
return anyType;
7415
7422
}
0 commit comments