diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index adace491618..47ebf0bd5b0 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10647,61 +10647,31 @@ namespace ts { type; } - function getWidenedLiteralLikeMapper(wideningFlags: TypeFlags) { - return !(wideningFlags & TypeFlags.UniqueESSymbol) ? getWidenedLiteralType : - !(wideningFlags & TypeFlags.WidenableLiteral) ? getWidenedUniqueESSymbolType : - getWidenedLiteralLikeType; - } - - /** - * Widens string literal, number literal, boolean literal, enum literal, and unique symbol - * types, as well as unions of the same. - * - * We don't always want to widen literals in all of the same places we widen unique symbol - * types, and vice versa. However, there are some cases where we do widen both sets of - * types at the same time. - * - * In general, this function should not be called directly. Instead it should be called - * through either `getWidenedLiteralType` (which does not widen unique symbol types), - * `getWidenedUniqueESSymbolType` (which only widenes unique symbol types), or - * `getWidenedLiteralLikeType` (which widens both). - */ - function getWidenedLiteralLikeTypeWorker(type: Type, wideningFlags: TypeFlags): Type { - return type.flags & wideningFlags & TypeFlags.EnumLiteral ? getBaseTypeOfEnumLiteralType(type) : - type.flags & wideningFlags & TypeFlags.StringLiteral && type.flags & TypeFlags.FreshLiteral ? stringType : - type.flags & wideningFlags & TypeFlags.NumberLiteral && type.flags & TypeFlags.FreshLiteral ? numberType : - type.flags & wideningFlags & TypeFlags.BooleanLiteral ? booleanType : - type.flags & wideningFlags & TypeFlags.UniqueESSymbol ? esSymbolType : - type.flags & TypeFlags.Union ? getUnionType(sameMap((type).types, getWidenedLiteralLikeMapper(wideningFlags))) : + function getWidenedLiteralLikeType(type: Type): Type { + return type.flags & TypeFlags.EnumLiteral ? getBaseTypeOfEnumLiteralType(type) : + type.flags & TypeFlags.StringLiteral && type.flags & TypeFlags.FreshLiteral ? stringType : + type.flags & TypeFlags.NumberLiteral && type.flags & TypeFlags.FreshLiteral ? numberType : + type.flags & TypeFlags.BooleanLiteral ? booleanType : + type.flags & TypeFlags.UniqueESSymbol ? esSymbolType : + type.flags & TypeFlags.Union ? getUnionType(sameMap((type).types, getWidenedLiteralLikeType)) : type; } - /** - * Widens string literal, number literal, boolean literal, enum literal, and unique symbol - * types, as well as unions of the same. - */ - function getWidenedLiteralLikeType(type: Type): Type { - return getWidenedLiteralLikeTypeWorker(type, TypeFlags.WidenableLiteralLike); - } - - /** - * Widens string literal, number literal, boolean literal, and enum literal types, as well - * as unions of the same. - */ function getWidenedLiteralType(type: Type): Type { - return getWidenedLiteralLikeTypeWorker(type, TypeFlags.WidenableLiteral); + return type.flags & TypeFlags.EnumLiteral ? getBaseTypeOfEnumLiteralType(type) : + type.flags & TypeFlags.StringLiteral && type.flags & TypeFlags.FreshLiteral ? stringType : + type.flags & TypeFlags.NumberLiteral && type.flags & TypeFlags.FreshLiteral ? numberType : + type.flags & TypeFlags.BooleanLiteral ? booleanType : + type.flags & TypeFlags.Union ? getUnionType(sameMap((type).types, getWidenedLiteralType)) : + type; } - /** - * Widens unique symbol types and unions of unique symbol types. - */ function getWidenedUniqueESSymbolType(type: Type): Type { - return getWidenedLiteralLikeTypeWorker(type, TypeFlags.UniqueESSymbol); + return type.flags & TypeFlags.UniqueESSymbol ? esSymbolType : + type.flags & TypeFlags.Union ? getUnionType(sameMap((type).types, getWidenedUniqueESSymbolType)) : + type; } - /** - * Widens a literal-like type when the contextual type is not literal-like. - */ function getWidenedLiteralLikeTypeForContextualType(type: Type, contextualType: Type) { const widenLiterals = !isLiteralContextualType(contextualType); const widenSymbols = !isUniqueESSymbolContextualType(contextualType); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index fa1127f8fd0..21ee4af65ec 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -3306,9 +3306,6 @@ namespace ts { RequiresWidening = ContainsWideningType | ContainsObjectLiteral, /* @internal */ PropagatingFlags = ContainsWideningType | ContainsObjectLiteral | ContainsAnyFunctionType, - - WidenableLiteral = Literal | EnumLiteral, - WidenableLiteralLike = WidenableLiteral | UniqueESSymbol, } export type DestructuringPattern = BindingPattern | ObjectLiteralExpression | ArrayLiteralExpression; diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 62fd09d44db..0b92c4c00a2 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -2012,8 +2012,6 @@ declare namespace ts { TypeVariable = 1081344, Narrowable = 35620607, NotUnionOrUnit = 33620481, - WidenableLiteral = 480, - WidenableLiteralLike = 1504, } type DestructuringPattern = BindingPattern | ObjectLiteralExpression | ArrayLiteralExpression; interface Type { diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index ed1f07fb0a1..0c5d2b56fc0 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -2012,8 +2012,6 @@ declare namespace ts { TypeVariable = 1081344, Narrowable = 35620607, NotUnionOrUnit = 33620481, - WidenableLiteral = 480, - WidenableLiteralLike = 1504, } type DestructuringPattern = BindingPattern | ObjectLiteralExpression | ArrayLiteralExpression; interface Type {