diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cf7f65f37b9..b9698d23e8a 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -20258,22 +20258,15 @@ namespace ts { * and no required properties, call/construct signatures or index signatures */ function isWeakType(type: Type): boolean { - if (!(type.flags & (TypeFlags.Object | TypeFlags.Intersection))) { - return false; + if (type.flags & TypeFlags.Object) { + const resolved = resolveStructuredTypeMembers(type as ObjectType); + return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 && resolved.indexInfos.length === 0 && + resolved.properties.length > 0 && every(resolved.properties, p => !!(p.flags & SymbolFlags.Optional)); } - if (!((type as ObjectType | IntersectionType).objectFlags & ObjectFlags.IsWeakTypeComputed)) { - let isWeak; - if (type.flags & TypeFlags.Object) { - const resolved = resolveStructuredTypeMembers(type as ObjectType); - isWeak = resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 && resolved.indexInfos.length === 0 && - resolved.properties.length > 0 && every(resolved.properties, p => !!(p.flags & SymbolFlags.Optional)); - } - else { - isWeak = every((type as IntersectionType).types, isWeakType); - } - (type as ObjectType | IntersectionType).objectFlags |= ObjectFlags.IsWeakTypeComputed | (isWeak ? ObjectFlags.IsWeakType : 0); + if (type.flags & TypeFlags.Intersection) { + return every((type as IntersectionType).types, isWeakType); } - return !!((type as ObjectType | IntersectionType).objectFlags & ObjectFlags.IsWeakType); + return false; } function hasCommonProperties(source: Type, target: Type, isComparingJsxAttributes: boolean) { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 05ac24af6e2..5cabf3edef8 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -5360,12 +5360,6 @@ namespace ts { IsNeverIntersectionComputed = 1 << 25, // IsNeverLike flag has been computed /* @internal */ IsNeverIntersection = 1 << 26, // Intersection reduces to never - - // Flags that require TypeFlags.Object or TypeFlags.Intersection - /* @internal */ - IsWeakTypeComputed = 1 << 27, - /* @internal */ - IsWeakType = 1 << 28, } /* @internal */