From 97cb8188f071f52f466a7b879f78edc9a3091f6e Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 18 May 2020 19:46:35 -0700 Subject: [PATCH] No contextual types from circular mapped type properties --- src/compiler/checker.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index fcd96daac8f..8b8a12fa723 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -22469,6 +22469,10 @@ namespace ts { } } + function isCircularMappedProperty(symbol: Symbol) { + return !!(getCheckFlags(symbol) & CheckFlags.Mapped && !(symbol).type && findResolutionCycleStartIndex(symbol, TypeSystemPropertyName.Type) >= 0); + } + function getTypeOfPropertyOfContextualType(type: Type, name: __String) { return mapType(type, t => { if (isGenericMappedType(t)) { @@ -22482,7 +22486,7 @@ namespace ts { else if (t.flags & TypeFlags.StructuredType) { const prop = getPropertyOfType(t, name); if (prop) { - return getTypeOfSymbol(prop); + return isCircularMappedProperty(prop) ? undefined : getTypeOfSymbol(prop); } if (isTupleType(t)) { const restType = getRestTypeOfTupleType(t);