From aca7e2fa3bcb6b1ebe623e79578aaa7faf98a8b6 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Tue, 8 Nov 2016 13:38:52 -0800 Subject: [PATCH] Don't include private/protected properties in keyof T --- src/compiler/checker.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d2d2e9f84d9..8ed8df17c68 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5816,7 +5816,9 @@ namespace ts { } function getLiteralTypeFromPropertyName(prop: Symbol) { - return startsWith(prop.name, "__@") ? neverType : getLiteralTypeForText(TypeFlags.StringLiteral, unescapeIdentifier(prop.name)); + return getDeclarationModifierFlagsFromSymbol(prop) & ModifierFlags.NonPublicAccessibilityModifier || startsWith(prop.name, "__@") ? + neverType : + getLiteralTypeForText(TypeFlags.StringLiteral, unescapeIdentifier(prop.name)); } function getLiteralTypeFromPropertyNames(type: Type) { @@ -7044,7 +7046,7 @@ namespace ts { return result; } } - else if (isGenericMappedType(target)) { + if (isGenericMappedType(target)) { // A type [P in S]: X is related to a type [P in T]: X if T is related to S. if (isGenericMappedType(source) && isRelatedTo(getConstraintTypeFromMappedType(target), getConstraintTypeFromMappedType(source), /*reportErrors*/ false) &&