@@ -16270,7 +16270,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
16270
16270
}
16271
16271
16272
16272
// This function assumes the constituent type list is sorted and deduplicated.
16273
- function getUnionTypeFromSortedList(types: Type[], objectFlags : ObjectFlags, aliasSymbol?: Symbol, aliasTypeArguments?: readonly Type[], origin?: Type): Type {
16273
+ function getUnionTypeFromSortedList(types: Type[], precomputedObjectFlags : ObjectFlags, aliasSymbol?: Symbol, aliasTypeArguments?: readonly Type[], origin?: Type): Type {
16274
16274
if (types.length === 0) {
16275
16275
return neverType;
16276
16276
}
@@ -16285,7 +16285,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
16285
16285
let type = unionTypes.get(id);
16286
16286
if (!type) {
16287
16287
type = createType(TypeFlags.Union) as UnionType;
16288
- type.objectFlags = (objectFlags | getPropagatingFlagsOfTypes(types, /*excludeKinds*/ TypeFlags.Nullable)) & ~(ObjectFlags.IsUnknownLikeUnionComputed | ObjectFlags.IsUnknownLikeUnion );
16288
+ type.objectFlags = precomputedObjectFlags | getPropagatingFlagsOfTypes(types, /*excludeKinds*/ TypeFlags.Nullable);
16289
16289
type.types = types;
16290
16290
type.origin = origin;
16291
16291
type.aliasSymbol = aliasSymbol;
@@ -25649,7 +25649,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
25649
25649
newOrigin = createOriginUnionOrIntersectionType(TypeFlags.Union, originFiltered);
25650
25650
}
25651
25651
}
25652
- return getUnionTypeFromSortedList(filtered, (type as UnionType).objectFlags, /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, newOrigin);
25652
+ // filtering could remove intersections so `ContainsIntersections` might be forwarded "incorrectly"
25653
+ // it is purely an optimization hint so there is no harm in accidentally forwarding it
25654
+ return getUnionTypeFromSortedList(filtered, (type as UnionType).objectFlags & (ObjectFlags.PrimitiveUnion | ObjectFlags.ContainsIntersections), /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, newOrigin);
25653
25655
}
25654
25656
return type.flags & TypeFlags.Never || f(type) ? type : neverType;
25655
25657
}
0 commit comments