mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Defaultable -> NotNarrowable to align with use
This commit is contained in:
@@ -7555,7 +7555,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
function getNarrowedTypeOfReference(type: Type, reference: Node) {
|
||||
if (type.flags & TypeFlags.Defaultable || !isNarrowableReference(reference)) {
|
||||
if (type.flags & TypeFlags.NotNarrowable || !isNarrowableReference(reference)) {
|
||||
return type;
|
||||
}
|
||||
const leftmostNode = getLeftmostIdentifierOrThis(reference);
|
||||
@@ -7975,7 +7975,7 @@ namespace ts {
|
||||
const defaultsToDeclaredType = !strictNullChecks || type.flags & TypeFlags.Any || !declaration ||
|
||||
declaration.kind === SyntaxKind.Parameter || isInAmbientContext(declaration) ||
|
||||
getContainingFunctionOrModule(declaration) !== getContainingFunctionOrModule(node);
|
||||
if (defaultsToDeclaredType && type.flags & TypeFlags.Defaultable) {
|
||||
if (defaultsToDeclaredType && type.flags & TypeFlags.NotNarrowable) {
|
||||
return type;
|
||||
}
|
||||
const flowType = getFlowTypeOfReference(node, type, defaultsToDeclaredType ? type : undefinedType);
|
||||
|
||||
@@ -2176,12 +2176,12 @@ namespace ts {
|
||||
UnionOrIntersection = Union | Intersection,
|
||||
StructuredType = ObjectType | Union | Intersection,
|
||||
|
||||
// 'Defaultable' types are types where narrowing reverts to the original type, rather than actually narrow.
|
||||
// 'NotNarrowable' types are types where narrowing reverts to the original type, rather than actually narrow.
|
||||
// This is never really correct - you can _always_ narrow to an intersection with that type, _but_ we keep
|
||||
// Void as the only defaultable type, since it's a non-value type construct (representing a lack of a value)
|
||||
// and, generally speaking, narrowing `void` should fail in some way, as it is nonsensical. (`void` narrowing
|
||||
// to `void & T`, in a structural sense, is just narrowing to T, which we wouldn't allow under normal rules)
|
||||
Defaultable = Void,
|
||||
NotNarrowable = Void,
|
||||
/* @internal */
|
||||
RequiresWidening = ContainsUndefinedOrNull | ContainsObjectLiteral,
|
||||
/* @internal */
|
||||
|
||||
Reference in New Issue
Block a user