Skip to content

Commit f88606a

Browse files
committed
improve style/names
1 parent 6e29b51 commit f88606a

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

src/compiler/checker.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7644,6 +7644,7 @@ namespace ts {
76447644
return type && narrowType(type, flow.expression, flow.assumeTrue);
76457645
}
76467646

7647+
<<<<<<< 6e29b517c1915580728739864d5d7f6743d7ae14
76477648
function getTypeAtFlowNodeCached(flow: FlowNode) {
76487649
const cache = getFlowTypeCache(flow);
76497650
if (!key) {
@@ -7658,6 +7659,19 @@ namespace ts {
76587659
if (flowStackNodes[i] === flow && flowStackCacheKeys[i] === key) {
76597660
return undefined;
76607661
}
7662+
=======
7663+
return narrowBasedOnMatchingProperty(type, propName);
7664+
}
7665+
7666+
function isMemberSubtype(type: Type, check: Type, selectors: string[]): boolean {
7667+
if (!selectors.length) {
7668+
return isTypeSubtypeOf(type, check);
7669+
}
7670+
const name = selectors.pop();
7671+
const childProp = getPropertyOfType(type, name);
7672+
const propType = childProp && getTypeOfSymbol(childProp);
7673+
return propType && isMemberSubtype(propType, check, selectors);
7674+
>>>>>>> improve style/names
76617675
}
76627676
// Record node and key on stack of nodes being processed.
76637677
flowStackNodes[flowStackCount] = flow;
@@ -7670,6 +7684,7 @@ namespace ts {
76707684
return cache[key] || type && (cache[key] = type);
76717685
}
76727686

7687+
<<<<<<< 6e29b517c1915580728739864d5d7f6743d7ae14
76737688
function getTypeAtFlowLabel(flow: FlowLabel) {
76747689
const antecedentTypes: Type[] = [];
76757690
for (const antecedent of flow.antecedents) {
@@ -7687,6 +7702,20 @@ namespace ts {
76877702
if (!contains(antecedentTypes, type)) {
76887703
antecedentTypes.push(type);
76897704
}
7705+
=======
7706+
function narrowBasedOnMatchingProperty(type: Type, name: string): Type {
7707+
const childProp = getPropertyOfType(type, name);
7708+
const propType = childProp && getTypeOfSymbol(childProp);
7709+
const narrowedType = propType && narrowIntrospectively(propType);
7710+
7711+
if (narrowedType && !isTypeIdenticalTo(propType, narrowedType)) {
7712+
const symbols = cloneSymbolTable(resolveStructuredTypeMembers(type as ObjectType).members);
7713+
const temp = createSymbol(childProp.flags, name);
7714+
getSymbolLinks(temp).type = narrowedType;
7715+
symbols[name] = temp;
7716+
return createAnonymousType(createSymbol(type.symbol.flags, type.symbol.name), symbols, getSignaturesOfType(type, SignatureKind.Call),
7717+
getSignaturesOfType(type, SignatureKind.Construct), getIndexTypeOfType(type, IndexKind.String), getIndexTypeOfType(type, IndexKind.Number));
7718+
>>>>>>> improve style/names
76907719
}
76917720
}
76927721
return antecedentTypes.length === 0 ? undefined :

0 commit comments

Comments
 (0)