From 8c2f1e18ff46dd8e23c587945167202b604df01b Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 26 Aug 2016 15:50:59 -0700 Subject: [PATCH] Consider open types to be object literal types --- src/compiler/checker.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 25ee03c67f7..8a082539239 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7242,9 +7242,10 @@ namespace ts { * with no call or construct signatures. */ function isObjectLiteralType(type: Type) { - return type.symbol && (type.symbol.flags & (SymbolFlags.ObjectLiteral | SymbolFlags.TypeLiteral)) !== 0 && + return !!(type.symbol && type.symbol.flags & (SymbolFlags.ObjectLiteral | SymbolFlags.TypeLiteral) && getSignaturesOfType(type, SignatureKind.Call).length === 0 && - getSignaturesOfType(type, SignatureKind.Construct).length === 0; + getSignaturesOfType(type, SignatureKind.Construct).length === 0 || + type.flags & TypeFlags.Anonymous && (type).assignedMembers); } function createTransientSymbol(source: Symbol, type: Type) { @@ -8218,7 +8219,7 @@ namespace ts { } function createOpenType(flowNode: FlowNode, flowContainer: Node): Type { - const result = createObjectType(TypeFlags.Anonymous); + const result = createObjectType(TypeFlags.Anonymous | TypeFlags.ObjectLiteral); result.assignedMembers = createMap(); result.flowNode = flowNode; result.flowContainer = flowContainer;