From d0698751ce06814d740b22511c363d2a88a4a1bc Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Tue, 9 Oct 2018 18:41:58 -0700 Subject: [PATCH] Allow discriminant property to contain some non-unit types --- 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 fe2ce42652a..9578f7a106b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -12919,6 +12919,10 @@ namespace ts { isUnitType(type); } + function maybeUnitType(type: Type): boolean { + return type.flags & TypeFlags.Union ? some((type).types, isUnitType) : isUnitType(type); + } + function getBaseTypeOfLiteralType(type: Type): Type { return type.flags & TypeFlags.EnumLiteral ? getBaseTypeOfEnumLiteralType(type) : type.flags & TypeFlags.StringLiteral ? stringType : @@ -14217,7 +14221,7 @@ namespace ts { const prop = getUnionOrIntersectionProperty(type, name); if (prop && getCheckFlags(prop) & CheckFlags.SyntheticProperty) { if ((prop).isDiscriminantProperty === undefined) { - (prop).isDiscriminantProperty = !!((prop).checkFlags & CheckFlags.HasNonUniformType) && isLiteralType(getTypeOfSymbol(prop)); + (prop).isDiscriminantProperty = !!((prop).checkFlags & CheckFlags.HasNonUniformType) && maybeUnitType(getTypeOfSymbol(prop)); } return !!(prop).isDiscriminantProperty; }