Allow {} to narrow in same special cases as unknown (#50601)

This commit is contained in:
Andrew Branch
2022-09-02 09:47:27 -07:00
committed by GitHub
parent 854d448e5c
commit 856c7c5fdd
8 changed files with 942 additions and 2 deletions

View File

@@ -25288,14 +25288,19 @@ namespace ts {
assumeTrue = !assumeTrue;
}
const valueType = getTypeOfExpression(value);
if ((type.flags & TypeFlags.Unknown) && assumeTrue && (operator === SyntaxKind.EqualsEqualsEqualsToken || operator === SyntaxKind.ExclamationEqualsEqualsToken)) {
if (((type.flags & TypeFlags.Unknown) || isEmptyAnonymousObjectType(type) && !(valueType.flags & TypeFlags.Nullable)) &&
assumeTrue &&
(operator === SyntaxKind.EqualsEqualsEqualsToken || operator === SyntaxKind.ExclamationEqualsEqualsToken)
) {
if (valueType.flags & (TypeFlags.Primitive | TypeFlags.NonPrimitive)) {
return valueType;
}
if (valueType.flags & TypeFlags.Object) {
return nonPrimitiveType;
}
return type;
if (type.flags & TypeFlags.Unknown) {
return type;
}
}
if (valueType.flags & TypeFlags.Nullable) {
if (!strictNullChecks) {