Skip to content

Commit 9479353

Browse files
committed
Fix handling of index signatures in discriminated unions
1 parent bc59582 commit 9479353

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

src/compiler/checker.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4715,6 +4715,10 @@ namespace ts {
47154715
return prop ? getTypeOfSymbol(prop) : undefined;
47164716
}
47174717

4718+
function getTypeOfPropertyOrIndexSignature(type: Type, name: __String): Type {
4719+
return getTypeOfPropertyOfType(type, name) || isNumericLiteralName(name) && getIndexTypeOfType(type, IndexKind.Number) || getIndexTypeOfType(type, IndexKind.String) || unknownType;
4720+
}
4721+
47184722
function isTypeAny(type: Type | undefined) {
47194723
return type && (type.flags & TypeFlags.Any) !== 0;
47204724
}
@@ -15657,7 +15661,7 @@ namespace ts {
1565715661
}
1565815662
const propType = getTypeOfPropertyOfType(type, propName);
1565915663
const narrowedPropType = propType && narrowType(propType);
15660-
return propType === narrowedPropType ? type : filterType(type, t => isTypeComparableTo(getTypeOfPropertyOfType(t, propName)!, narrowedPropType!));
15664+
return propType === narrowedPropType ? type : filterType(type, t => isTypeComparableTo(getTypeOfPropertyOrIndexSignature(t, propName), narrowedPropType!));
1566115665
}
1566215666

1566315667
function narrowTypeByTruthiness(type: Type, expr: Expression, assumeTrue: boolean): Type {

0 commit comments

Comments
 (0)