diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2e6259b668..84d4132e61 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -15045,11 +15045,6 @@ namespace ts { return false; } - function hasNarrowableDeclaredType(expr: Node) { - const type = getDeclaredTypeOfReference(expr); - return !!(type && type.flags & TypeFlags.Union); - } - function findDiscriminantProperties(sourceProperties: Symbol[], target: Type): Symbol[] | undefined { let result: Symbol[] | undefined; for (const sourceProperty of sourceProperties) { @@ -16107,9 +16102,9 @@ namespace ts { // We have '==', '!=', '====', or !==' operator with 'typeof xxx' and string literal operands const target = getReferenceCandidate(typeOfExpr.expression); if (!isMatchingReference(reference, target)) { - // For a reference of the form 'x.y', where 'x' has a narrowable declared type, a - // 'typeof x === ...' type guard resets the narrowed type of 'y' to its declared type. - if (containsMatchingReference(reference, target) && hasNarrowableDeclaredType(target)) { + // For a reference of the form 'x.y', a 'typeof x === ...' type guard resets the + // narrowed type of 'y' to its declared type. + if (containsMatchingReference(reference, target)) { return declaredType; } return type; @@ -16264,9 +16259,9 @@ namespace ts { function narrowTypeByInstanceof(type: Type, expr: BinaryExpression, assumeTrue: boolean): Type { const left = getReferenceCandidate(expr.left); if (!isMatchingReference(reference, left)) { - // For a reference of the form 'x.y', where 'x' has a narrowable declared type, an - // 'x instanceof T' type guard resets the narrowed type of 'y' to its declared type. - if (containsMatchingReference(reference, left) && hasNarrowableDeclaredType(left)) { + // For a reference of the form 'x.y', an 'x instanceof T' type guard resets the + // narrowed type of 'y' to its declared type. + if (containsMatchingReference(reference, left)) { return declaredType; } return type; @@ -27221,7 +27216,7 @@ namespace ts { reference.expression.parent = reference; reference.parent = constructor; reference.flowNode = constructor.returnFlowNode; - const flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType)); + const flowType = getFlowTypeOfReference(reference, getOptionalType(propType)); return !(getFalsyFlags(flowType) & TypeFlags.Undefined); }